为什么我的oracle日期字段不在查询范围内?

时间:2017-03-29 12:13:57

标签: sql oracle

我有这个SQL查询:

select email_id, to_char(last_update_date, 'YYYY-MM-DD hh:mi:ss') 
from profile_table
where last_update_date < sysdate and
      last_update_date > sysdate -1;

返回结果

                EMAIL_ID   TO_CHAR(last_update_date, 'YYYY-MM-DD hh:mi:ss')
------------------------   ------------------------------------------------
       email_007@abc.com                                2017-03-28 12:00:04
       nachppx@gmail.com                                2017-03-28 03:45:26
       QM_SFGD@yahoo.com                                2017-03-29 08:24:12
j.w.booth@rocketmail.com                                2017-03-29 11:16:00

但是,我很确定该查询缺少记录,该记录应该在&#39;其中&#39;范围,因为当我发出这个:

select email_id, to_char(last_update_date, 'YYYY-MM-DD hh:mi:ss')
from profile_table
where email_id = 'kgunash@gmail.com'

它返回

                EMAIL_ID   TO_CHAR(last_update_date, 'YYYY-MM-DD hh:mi:ss')
------------------------   ------------------------------------------------
       kgunash@gmail.com                                2017-03-29 05:53:33

执行期间我的sysdate如下:

select to_char(sysdate,'YYYY-MM-DD hh:mm:ss'), to_char(sysdate-1,'YYYY-MM-DD hh:mm:ss')
from dual
TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS')   TO_CHAR(SYSDATE-1,'YYYY-MM-DD HH:MI:SS')
-------------------------------------   ---------------------------------------
                  2017-03-29 11:12:19                       2017-03-28 11:12:19

显然 2017-03-29 05:53:33 应介于 2017-03-29 11:12:19 2017-03-28十一时12分19秒即可。任何人都知道发生了什么?

1 个答案:

答案 0 :(得分:1)

您的输出使用12小时时钟而不使用AM / PM修改器。如果遗失的记录已标记2017-03-29 05:53:33 PM在PM中,那么它将晚于2017-03-29 11:12:19 AM,因此会从您的结果集中正确排除。

最简单的检查方法是在显示日期时使用HH24格式掩码。