• ベストアンサー

23時59分59秒までのデータを抽出する

いつもお世話になっております。 現在PL/SQLでデータの抽出を行う課題に 取り組んでいるのですが、 期間を指定してデータを取り出す際に 期間はパラメータで渡すのですが、 【例】 2009/1/1~2009/6/30と指定された場合、 日付変数 BETWEEN 20090101 AND 20090630  上期のですと、6/30の0時0分0秒までですよね? これを6/30 23時59分59秒まで出力するためには どうしたらよいでしょうか? ちなみに、日付変数には年月日時分秒で入っていて、 期間の指定は出力の際にYYYYMMDDで指定することに なっています。 終了を2009/7/1で指定して1秒引くのかなとも 思ったのですが、できれば、指定された 日付のみを使って抽出ができればと思っています。 もし何か方法がありましたら、教えていただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • n09430515
  • ベストアンサー率52% (11/21)
回答No.2

trunc(日付変数) BETWEEN 20090101 AND 20090630  これが希望の答えではありませんか? No.1の方も同じことを示唆していると思います。 ただし、この条件句ではパフォーマンスが悪くなることがあります。

tao0417
質問者

お礼

丁寧なご説明ありがとうございます。 No.1の方に教えていただいたURLを読んで 日付変数 BETWEEN start AND trunc(end) とやっておりました。 初心者なので、分かりやすく教えていただき 本当に助かりました。ありがとうございます。

その他の回答 (2)

回答No.3

時間を除く日付での範囲条件を書くなら、 where trunc(日付変数) between to_date(start,'yyyymmdd') and to_date(end,'yyyymmdd'); と書くのが適切かと思いますよ。 DATE型に、数値や文字列の定数や変数を比較させると暗黙の型変換が行われますので、場合によっては誤動作の種になります。

tao0417
質問者

お礼

ご回答ありがとうございます。 trunk(日付変数)とすることで出力できました。 ありがとうございます。

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

>日付変数 上記はDATE型のことですよね。 こういう場合は以下URLのようにします。 ききたいのはこのことですよね? http://itpro.nikkeibp.co.jp/article/COLUMN/20060309/232077/

tao0417
質問者

お礼

No.2の方に細かく説明していただき 結果が無事出力されました。 初心者なので、理解が不十分で 『少し違いました』などと勘違いをしてしまい 申し訳ありませんでした。

tao0417
質問者

補足

教えていただいたURLはすでに見ていたのですが、 探しているものと少し違いました。 パラメータを使うので、 : WHERE 日付変数 BETWEEN start AND  end; と指定して、 EXECUTE('20090101','20090630')と入力して実行しています。 URLのを参考に WHERE 日付変数 BETWEEN start AND trunc(end); としましたが、2009-06-30 23:59:59は出力されませんでした。

関連するQ&A