在Where子句中使用Oracle DateTime?
在Where子句中使用Oracle DateTime?
我有一个类似于这样的 SQL 查询:
SELECT EMP_NAME, DEPT FROM EMPLOYEE WHERE TIME_CREATED >= TO_DATE('26/JAN/2011','dd/mon/yyyy')
-> 这将返回 10 行且 TIME_CREATED = \'26-JAN-2011\'
现在当我移除大于号时,就没有任何行返回,
SELECT EMP_NAME, DEPT FROM EMPLOYEE WHERE TIME_CREATED = TO_DATE('26/JAN/2011','dd/mon/yyyy')
-> 有任何原因吗?
admin 更改状态以发布 2023年5月22日
是的:TIME_CREATED包含日期和时间。使用TRUNC
来去除时间:
SELECT EMP_NAME, DEPT FROM EMPLOYEE WHERE TRUNC(TIME_CREATED) = TO_DATE('26/JAN/2011','dd/mon/yyyy')
更新:
正如Dave Costa在下面的评论中指出的那样,这将防止Oracle使用列TIME_CREATED
的索引,如果存在的话。一个没有这个问题的替代方法是:
SELECT EMP_NAME, DEPT FROM EMPLOYEE WHERE TIME_CREATED >= TO_DATE('26/JAN/2011','dd/mon/yyyy') AND TIME_CREATED < TO_DATE('26/JAN/2011','dd/mon/yyyy') + 1