首页 > 解决方案 > oracle中如何比较日期和时间

问题描述

试图将两个日期与时间进行比较。但比较不起作用。

SELECT *
   FROM attendance
  WHERE     TO_DATE (checktime, 'DD/MM/YYYY HH:MI:SS AM') >=
               TO_DATE ('01/09/2019 04:30:00 PM', 'DD/MM/YYYY HH:MI:SS AM')
        AND TO_DATE (checktime, 'DD/MM/YYYY HH:MI:SS AM') <=
               TO_DATE ('30/09/2019 10:00:00 PM', 'DD/MM/YYYY HH:MI:SS AM')
        AND userid = '3825'
        AND SUBSTR (checktime, -2, 2) = 'PM'
ORDER BY TO_DATE (checktime, 'DD/MM/YYYY HH:MI:SS AM') ASC

我期待输出等于或大于下午 4:30 和小于或等于晚上 10:00。但是这个日期比较不起作用。这是 代码的输出。我希望我的结果包括提到的时间段之间的日期和时间。 注意:CHECKTIME 数据类型是 varchar2。

标签: sqloracle

解决方案


TO_TIMESTAMP您可以通过使用这种包含转换的格式来修复您的格式

SELECT *
  FROM attendance
 WHERE checktime 
       BETWEEN TO_TIMESTAMP('01/09/2019 16:30:00.000000','dd/mm/yyyy hh24:mi:ss.ff')
           AND TO_TIMESTAMP('30/09/2019 22:30:00.000000','dd/mm/yyyy hh24:mi:ss.ff')
   AND userid = 3825
 ORDER BY checktime;

Demo

编辑:您最好添加一个带有时间戳数据类型的新列,并通过使用TO_TIMESTAMP如下转换来更新新列的数据:

UPDATE attendance
   SET checktime2 = TO_TIMESTAMP('3/09/2019 5:38:36 PM','dd/mm/yyyy hh:mi:ss AM')  
 WHERE id = 3825
   AND checktime = '3/09/2019 5:38:36 PM' 

推荐阅读