从SQL / ORACLE

时间:2017-09-21 19:13:40

标签: sql oracle

我有一个DATE类型的列。如何将其与SYSDATE的小时字段进行比较以执行某些操作?

列名:DateColumn - 类型为DATE

要求:
考虑来自DateColumn的小时数的表格中的搜索条件,并应检查SYSDATE中的小时数是否小于10小时

例如,如果DateColumn中的小时数为15SYSDATE的当前小时数为20,则小时差异小于10小时,则应满足条件。

我需要这样的东西:

 SELECT EMP_ID FROM EMPLOYEE WHERE SYSDATE(something to extract hours) - 
 DATECOLUMN(something to consider hours) < 10;

编辑: 它应该考虑天数之间的差异。

如果DateColumn 20-09-2017 15:00:000SYSDATE 21-09-2017 20:00:00029,则应该会失败,因为小时差为dim3 gridXY(gridX, gridY);

3 个答案:

答案 0 :(得分:2)

SELECT EMP_ID FROM EMPLOYEE WHERE TO_NUMBER(TO_CHAR(sysdate,'HH24')) - TO_NUMBER(TO_CHAR(sysdate,'HH24')) < 10;

答案 1 :(得分:2)

如果您需要考虑20:00仅在04:00之前8小时,那么您可以使用:

SELECT *
FROM   employees
WHERE  ABS( MOD( ( SYSDATE - DateColumn ) * 24, 24 ) ) < 10;

如果您还需要包含日期:

SELECT *
FROM   EMPLOYEES
WHERE  DateColumn BETWEEN SYSDATE - INTERVAL '10' HOUR
                      AND SYSDATE + INTERVAL '10' HOUR;

答案 2 :(得分:0)

您可以使用extract

SELECT emp_id 
FROM   employee
WHERE  EXTRACT(HOUR FROM SYSDATE) - EXTRACT(HOUR FROM datecolumn) < 10;