在 oracle 中运行基于周末的查询

Posted

技术标签:

【中文标题】在 oracle 中运行基于周末的查询【英文标题】:Run a query based on weekends in oracle 【发布时间】:2015-06-08 02:44:52 【问题描述】:

我是 ORACLE 的新手;请帮忙 我正在尝试运行基于日期提取记录的查询;

如果日期是星期一,查询应该运行三次;即周一、周日、周六(前几天也是)其他日子(周二至周四仅限同一天);

【问题讨论】:

为什么主题说oracle并且它被标记为SQL server?它们之间的日期处理存在很大差异 您的标题是 Oracle,但您的标签是 SQL Server。请说明您正在使用哪个 RDBMS。 【参考方案1】:

首先,如果您想运行 3 次查询,则需要使用普通 SQL: PL-SQL, Java, C#, something. 以外的其他方式来执行此操作

但是,如果您希望将周六和周日的数据包含在周一的数据中,则需要执行 CASE 声明之类的操作,将周六和周日更改为周一。

 case when (trim(to_char((date), 'Day', 'NLS_DATE_LANGUAGE=ENGLISH'))
  in ('Saturday', 'Sunday', 'Monday')) then 'Monday'
  else trim(to_char((date), 'Day', 'NLS_DATE_LANGUAGE=ENGLISH')) 
 end

【讨论】:

【参考方案2】:

我正在尝试运行一个根据日期提取记录的查询

对于基于日历的调度,Oracle 提供了DBMS_SCHEDULER

例如,以下作业将每小时执行一次:

SQL> BEGIN
  2    DBMS_SCHEDULER.DROP_JOB (JOB_NAME => 'test_full_job_definition');
  3  END;
  4  /

PL/SQL procedure successfully completed.

SQL>
SQL> BEGIN
  2    DBMS_SCHEDULER.create_job (
  3      job_name        => 'test_full_job_definition',
  4      job_type        => 'PLSQL_BLOCK',
  5      job_action      => 'BEGIN my_job_procedure; END;',
  6      start_date      => SYSTIMESTAMP,
  7      repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
  8      end_date        => NULL,
  9      enabled         => TRUE,
 10      comments        => 'Job defined entirely by the CREATE JOB procedure.');
 11  END;
 12  /

PL/SQL procedure successfully completed.

SQL>
SQL> SELECT JOB_NAME, ENABLED FROM DBA_SCHEDULER_JOBS where job_name ='TEST_FULL_JOB_DEFINITION'
  2  /

JOB_NAME                                 ENABL
---------------------------------------- -----
TEST_FULL_JOB_DEFINITION                 TRUE

SQL>

更多例子here

【讨论】:

以上是关于在 oracle 中运行基于周末的查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库12c中基于MYSQL的查询

在提交之前更改 Oracle SQL 查询文本 [关闭]

oracle中怎么得到日期相减除去周末后的天数

在 oracle 中运行字符串作为查询

在 Oracle 的存储过程中动态运行查询

在 Oracle 中运行速度极慢的 Postgres 查询