SQLでの日付比較での注意点 うまく条件分岐できない、データが取れない

カラムの型を確認する

SQLで日付比較をするときカラムがDate型でも、’2023/01/01’ というような文字列で渡していないだろうか?

SELECT * FROM TABLE WHERE DATE BETWEEN '2023/01/01' AND '2023/12/31'

となるようなSQLだとうまく条件に当てはまらない日付がでることもある。

ほとんどのDBでは、カラムに対して、値が自動的に型変換される。

この場合、渡した’2023/01/01’が日付型に変換されるだろう。

0が抜けていたり、全角になっていたり、うまく日付型に変換できないときがあるかもしれない。

カラムが日付型なら、値となる日付も’2023-01-01’として、渡すべきである。

そのうえで明示的に型を変換する

SELECT * FROM TABLE CONVERT(date,DATE) > '2023-01-01'
SELECT * FROM TABLE DATE > cast('2023-01-01' as date)

などである。

Nullや空判定もきちんとする

また、空やNULLは日付比較できないため、条件に当てはまる場合がある。

その場合は、カラムのNULLや空判定をしなければならない。

WHERE ISNULL(DATE,'') <> ''

このような条件を付ければ、空やNULLのカラムは出てこない。