アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
現在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秒引くのかなとも
思ったのですが、できれば、指定された
日付のみを使って抽出ができればと思っています。

もし何か方法がありましたら、教えていただけないでしょうか?
よろしくお願いいたします。

A 回答 (3件)

trunc(日付変数) BETWEEN 20090101 AND 20090630 



これが希望の答えではありませんか?
No.1の方も同じことを示唆していると思います。

ただし、この条件句ではパフォーマンスが悪くなることがあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/19 08:57

時間を除く日付での範囲条件を書くなら、



where trunc(日付変数) between to_date(start,'yyyymmdd') and to_date(end,'yyyymmdd');

と書くのが適切かと思いますよ。
DATE型に、数値や文字列の定数や変数を比較させると暗黙の型変換が行われますので、場合によっては誤動作の種になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/19 09:01

>日付変数


上記はDATE型のことですよね。

こういう場合は以下URLのようにします。
ききたいのはこのことですよね?
http://itpro.nikkeibp.co.jp/article/COLUMN/20060 …

この回答への補足

教えていただいたURLはすでに見ていたのですが、
探しているものと少し違いました。

パラメータを使うので、

WHERE 日付変数 BETWEEN start AND  end;
と指定して、
EXECUTE('20090101','20090630')と入力して実行しています。
URLのを参考に
WHERE 日付変数 BETWEEN start AND trunc(end);

としましたが、2009-06-30 23:59:59は出力されませんでした。

補足日時:2009/06/18 15:54
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/19 08:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す