我正在使用查询根据某些条件从表中检索一些数据。下面提到了查询。
当我使用 TO_CHAR 函数显示 empcheckin 时间时指定了相同的格式
尝试过:
TO_CHAR(E.EMPCHECKIN, 'DD-MON-YY HH24:MM:SS') <= TO_CHAR('24-APR-24 11:35:00')
SELECT L.LOCKUNLOCKID, E.EMPID, TO_CHAR(E.EMPCHECKIN, 'DD-MON-YY HH24:MM:SS'), S.N_SATOFF, e.empcheckin FROM LOCKUNLOCKEMPLDAP L JOIN EMPLOGINDTLS E ON E.EMPID=L.EMPID JOIN SATOFF S ON S.EMPID=L.EMPID WHERE TRUNC(L.PROCESS_DATE)=TRUNC(SYSDATE) AND TRUNC(E.EMPCHECKIN)>='22-APR-24' AND TRUNC(E.EMPCHECKIN) != E.EMPCHECKIN ORDER BY E.EMPID;
预期输出: 表两列中的数据相同,即 第 1 列(e.empcheckin)|第 2 栏 (
TO_CHAR(E.EMPCHECKIN, 'DD-MON-YY HH24:MM:SS'
)
24 年 4 月 24 日 11:42:28 | 24 年 4 月 24 日 11:42:28
实际输出: [SQL Developer 查询结果请参考此图]: 数值不一样,相差 40 分钟。
在这里,您可以观察到 empcheckin 的两个值之间存在很大差异。 可能是什么原因造成的?我该如何解决?
还有支线任务:
帮我写下条件,以便我可以将 EMPCHECKIN 中的时间戳与
TO_CHAR(E.EMPCHECKIN, 'DD-MON-YY HH24:MM:SS') <= TO_CHAR('24-APR-24 11:35:00')
... TO_CHAR(E.EMPCHECKIN, 'DD-MON-YY HH24:MM:SS') ...
您已在
MM
中使用了 'DD-MON-YY HH24:MM:SS'
格式元素两次。这就是为什么输出中的“分钟”部分显示为 04
- 因为这是四月的月份数字。
应该是:
TO_CHAR(E.EMPCHECKIN, 'DD-MON-YY HH24:MI:SS')
你也在做:
WHERE TRUNC(L.PROCESS_DATE)=TRUNC(SYSDATE)
AND TRUNC(E.EMPCHECKIN)>='22-APR-24'
您并不真的想截断列值,因为对列应用函数将停止正在使用的列上的任何普通索引。对于第二行,如果该条件为真,则被截断则为真。对于第一行,如果
process_date
将来不可能出现,情况也会如此;如果它可以进行范围检查。
WHERE L.PROCESS_DATE >= TRUNC(SYSDATE)
AND L.PROCESS_DATE < TRUNC(SYSDATE) + 1 -- only needed if process_date can be in the future
AND E.EMPCHECKIN >= DATE '2024-04-22'
将 EMPCHECKIN 中的时间戳与 11:35:00 进行比较
如果您想要该检查的上限 - 看起来您的固定值尝试正在做 - 那么您可以这样做:
AND E.EMPCHECKIN <= TRUNC(SYSDATE) + INTERVAL '11:35' HOUR TO MINUTE
或
AND E.EMPCHECKIN < TRUNC(SYSDATE) + INTERVAL '11:35:01' HOUR TO SECOND