2017-03-29 11 views
1

私は、このSQLクエリがあります。oracleの日付フィールドが照会された範囲に含まれないのはなぜですか?

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 protected]        2017-03-28 12:00:04 
     [email protected]        2017-03-28 03:45:26 
     [email protected]        2017-03-29 08:24:12 
[email protected]        2017-03-29 11:16:00 

を返します。これを発行すると、次のようになります:

select email_id, to_char(last_update_date, 'YYYY-MM-DD hh:mi:ss') 
from profile_table 
where email_id = '[email protected]' 
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年3月29日午前5時53分33秒必要があります:0それは実行時に私のSYSDATEは以下の通りです

   EMAIL_ID TO_CHAR(last_update_date, 'YYYY-MM-DD hh:mi:ss') 
------------------------ ------------------------------------------------ 
     [email protected]        2017-03-29 05:53:33 

を返します。間に入る2017-03-29 11:12:19および2017-03-28 11:12:19。誰が何が起こっているか考えている?

+5

時間形式には 'hh24'を使用してください。そうでない場合はam/pmインジケータを使用してください。すべての時間はあいまいです – Mat

+0

それだけです。 @Matはそれを解決する。みんなありがとう! – kfitri

答えて

1

出力にAM/PM修飾子を使用しないで12時間クロックを使用します。見つからないレコードが2017-03-29 05:53:33 PMの場合は、PMになります。それは2017-03-29 11:12:19 AMより遅くなり、結果セットから正しく除外されます。

最も簡単な方法は、日付を表示するときにHH24フォーマットマスクを使用することです。

関連する問題