在Where子句中使用Oracle DateTime?

14 浏览
0 Comments

在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日
0
0 Comments

你可以使用以下方式在查询中包含时间部分:

SELECT EMP_NAME
     , DEPT
  FROM EMPLOYEE 
 WHERE TIME_CREATED >= TO_DATE('26/JAN/2011 00:00:00', 'dd/mon/yyyy HH24:MI:SS');

0
0 Comments

是的: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

0