在 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 中运行基于周末的查询的主要内容,如果未能解决你的问题,请参考以下文章