お疲れ様です。
はるさらでございます。
今回は研修中の生徒から尋ねられた内容を
備忘録として残しておきたいと思います。
事象:
「Where句で日付の範囲を指定したのですが
思ったように表示されない・・・」
とのことでした。
詳しく話を聞いてみると
「A日~B日までのデータを抽出したいのに
なぜかB日が除外されてしまう。」
らしいです。
実行していたSQL
SELECT * FROM LibraryHistory
where to_date('2016/02/04','YYYY/MM/DD') <= LendingDay
and to_date('2020/11/06','YYYY/MM/DD') >= LendingDay;
「LibraryHistory」という表から、
「LendingDay」という日付型の項目が
2016/02/04~2020/11/06の期間のレコードを
抽出するという構文でした。
(betweenは? という指摘は無しでお願いします・・・)
「LibraryHistory」テーブルの中身
想定ではSQLを実行して
3レコード抽出されてほしいところです。
実行結果
実際に抽出されたレコードがこちら
・・・2レコードしか出力されませんでした。
では、なぜ同じ日付なのに
ID=2のレコードが表示されなかったのでしょうか??
原因
それでは今回上手くいかなかった理由を
探っていきましょう。
生徒より
「2016/02/04~2020/11/06の期間での指定ではダメでしたが
2016/02/04~2020/11/07にしたら、
6日までレコードが取れました!!」
との報告があったため
年月日以降がどう設定されているかが気になりました。
結果が下記になります。
年月日以降の値も
登録されていることが分かりました!
where句では年月日までしか指定していないため
LendingDayが「2020/11/06 00:00:00」までの
レコードを探しに行きます。
上記の画像で分かる通り、
抽出から漏れていたID=2 の
「信長伝」は「2020/11/06 17:48:40」
で登録されているため
表示する対象から外れてしまいました。
insert時にSYSDATEを使用したことで、
日付以降の情報も入ってしまったらしいです。
今回は実行したSelect文には問題がありませんでしたが
データの仕込みに考慮が足りなかったことが原因でした。
それではまたー!!