查询应提取查询日期在上午 12.01 到晚上 11.59 之间的记录数。
你可以这样做:
-
TRUNC 为您提供截断时间部分的日期元素
- 使用 TO_CHAR 将 SYSDATE 转换为字符串
- 然后连接时间元素
- 最终将所有内容转换回 DATE
SYSDATE 返回为数据库所在操作系统设置的当前日期和时间。返回值的数据类型为DATE,返回格式取决于NLS_DATE_FORMAT初始化参数的值。
因此,如果您想每天执行查询,则不必对任何 DATE 值进行硬编码。
在filter predicate 中使用以下内容:
BETWEEN
TO_DATE(TO_CHAR(TRUNC(SYSDATE), 'MM/DD/YYYY') ||' 00:01', 'MM/DD/YYYY HH24:MI')
AND
TO_DATE(TO_CHAR(TRUNC(SYSDATE), 'MM/DD/YYYY') ||' 23:59', 'MM/DD/YYYY HH24:MI')
演示
SQL> alter session set nls_date_format = 'MM/DD/YYYY HH24:MI:SS';
Session altered.
SQL> SELECT to_date(TO_CHAR(TRUNC(SYSDATE), 'MM/DD/YYYY')
2 ||' 00:01', 'MM/DD/YYYY HH24:MI') start_dt ,
3 to_date(TO_CHAR(TRUNC(SYSDATE), 'MM/DD/YYYY')
4 ||' 23:59', 'MM/DD/YYYY HH24:MI') end_date
5 FROM dual;
START_DT END_DATE
------------------- -------------------
05/06/2015 00:01:00 05/06/2015 23:59:00
SQL>
因此,您不必为当前日期输入任何硬编码值,SYSDATE 会处理它。你所做的只是:
-
TRUNC 通过截断时间部分给出日期元素。
- 然后连接所需的时间元素
- 使用 TO_DATE 将整个字符串转换为 DATE
我想安排这个查询,所以我不能指定任何硬线日期
要安排查询每天执行,您可以使用 DBMS_SCHEDULER。