我有这个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秒即可。任何人都知道发生了什么?
答案 0 :(得分:1)
您的输出使用12小时时钟而不使用AM / PM修改器。如果遗失的记录已标记2017-03-29 05:53:33 PM
在PM中,那么它将晚于2017-03-29 11:12:19 AM
,因此会从您的结果集中正确排除。
最简单的检查方法是在显示日期时使用HH24
格式掩码。