• ベストアンサー

oracle9i 日付データに関して

お世話になっております。 Oracle9i(9.0.1.0.1) Linux RedHat7.3J JDBC 接続でOracle Type4 ドライバを使用しています。 本日の日付は2003/09/10で、sysdateも2003/09/10です。 この環境で、以下のSQL文を発行すると、 0件が返ってきます。 select count(*) from dual where '20030910' >= sysdate 以下の条件だと1件返ってきます。 select count(*) from dual where '20030911' >= sysdate さらに、sysdateにフォーマットを指定すると select count(*) from dual where '20030910' >= to_char(sysdate,'yyyymmdd') 1件返ってきます。 質問は、sysdateにto_charのフォーマットを指定した場合と 指定しなかった場合との違いについて教えていただきたいのと、 その違いが明文化されているサイトやotnドキュメントが ありましたら教えていただきたいのです。 otnドキュメントの日付データのところを読んだのですが 詳しい事はわかりませんでした。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • paz777
  • ベストアンサー率47% (77/163)
回答No.1

こんにちは。 基本的に[SYSDATE]は日付だけでなく時刻まで管理しています。 日付項目に対して年月日までの固定値で比較させると固定値に 0時が仮定されます 従って最初のSQLでは '2003/09/10 00:00:00' >= '2003/09/10 10:10:10' の比較になりますので 0件が返ってきます。 2番目のSQLは '2003/09/11 00:00:00' >= '2003/09/10 10:10:10' の比較なので 1件返ります。 (分かりやすく年月日には'/'を入れました) 日付項目の比較に対してはTO_CHARでフォーマットを統一した方が分かりやすくなります。 ではでは・・・

mole_mole
質問者

お礼

ご回答ありがとうございます。 納得です。

その他の回答 (1)

回答No.2

ほんのりとした記憶ですが、 sysdateって時,分,秒も持っているはずです。 select count(*) from dual where '20030910' >= sysdate この比較だと今が12時ジャストとした場合 '20030910' >= '20030910 12:00:00' (もしかしたら'2003/09/10 00:00:00 >= sysdateかもしれません) と内部で判断するはずです。 よって0件となります。 select count(*) from dual where '20030910' >= to_char(sysdate,'yyyymmdd') これは単に'20030910'と'20030910'を比べますので 1件となります。 冒頭にも書きましたがあまり自信がありません。ご参考までに。

mole_mole
質問者

お礼

ご回答有難う御座います。 納得しました。

関連するQ&A