今日たぶん人生で初めてDATE型のデータをSQL文のWHERE句の条件で使った気がする。
比較条件の使い方を完全に勘違いしていたので、メモ書きとして
今後のために残しておく。
ピンポイントでSTART_DATEが2017-6-29のレコードが取得されるように、
こんなSQLを書いた。
SELECT * FROM TABLE_A WHERE START_DATE = '2017-06-29';
START_DATEはDATE型で定義されていて、実際にレコードには「2017-06-29」というデータが入っているのだけど、
いくら実行しても、結果は表示されず。
なんでだろう~、と思ってググったところ
そもそもDATE型は「=」で結ぶような比較は出来ないということが判明した。
では、どうやって比較すればいいのか。
その前に、DATE型に格納されている値について確認しておく。
表示上、「2017-2-29」とされていても実データの方には、
「2017-2-29 00:00:00」といった感じで時分秒まで格納されているのだ。
ということを踏まえると前述のSQLの場合、
SELECT * FROM TABLE_A WHERE START_DATE > TO_DATE('2017-6-28', 'YYYY/MM/DD') AND START_DATE < TO_DATE('2017-6-30', 'YYYY/MM/DD');
という、SQL文になる。一旦、TO_DATE書式を使って、書式をそろえる。
(実際はいちいちTO_DATE書式に揃えずとも問題ない)
時分秒まで指定したい場合は、
TO_DATE('2017-6-29 12:12:12', 'YYYY/MM/DD HH24/MI/SS');
のように記述する。
DATE型の比較については、BETWEENを使う方法もある。
範囲で検索結果を取得したい場合に有効。
以下の場合、2017-6-28の00:00:00から2017-6-30の23:59:59までに該当する
レコードが検索結果として取得される。
START_DATE BETWEEN TO_DATE('2017-6-28', 'YYYY/MM/DD') AND TO_DATE('2017-6-30', 'YYYY/MM/DD')
※間違えていたらぜひ指摘してください('ω')ノ
スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子
- 出版社/メーカー: インプレス
- 発売日: 2013/04/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
徹底攻略 Java SE 7/8 Bronze 問題集[1Z0-814]対応
- 作者: 志賀澄人,山岡敏夫,株式会社ソキウス・ジャパン
- 出版社/メーカー: インプレス
- 発売日: 2015/06/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る