「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

SQLで日付条件を使ってデータを抽出したい場合、代表的な書き方として BETWEEN>= / <=(範囲指定) を利用します。
しかし、実務では 時間を含むデータ境界値の違い により、意図したデータが取得できないケースが発生しやすいです。

この記事では、SQLで日付条件を扱う際の基本から、実務で気をつけるポイントまでわかりやすく解説します。


1. 基本の書き方:BETWEEN を使う

BETWEEN は指定した開始日と終了日 両方を含む 範囲検索です。

✔ 特徴

  • >=<= を同時に書くのと同じ意味

  • 開始日・終了日を含む(Inclusive)


2. >= / <= で範囲指定する書き方

BETWEEN と同じ結果になりますが、柔軟性の高い書き方です。

✔ メリット

  • 日付だけではなく、時間(時刻)条件も組み合わせやすい

  • >, <, <=, >= を使い分けられる


3. 時間が含まれる型(timestamp/datetime)の注意点

例えば 2025-01-31 14:35:20 など、時間まで保存されている場合、以下のように書くと 1月31日のデータが漏れます

2025-01-31 00:00:00 までしか含まれません。

✔ 正しい書き方(時刻含むデータ)

方法①:終了日を翌日扱いにし < を使う(最も推奨)

方法②:終了日を23:59:59にする(非推奨・環境依存)

→ 秒まで正確でない可能性があるため、業務システムでは推奨されません。


4. DB製品別の書き方の違い

DB注意点 / 推奨書き方
MySQLDATE(order_date) を条件にするとINDEX無効になるので注意
SQL ServerBETWEEN より < 次月1日 の方がトラブルが少ない
OracleTRUNC() を使用して丸める書き方も一般的

Oracleの例:


5. 日付範囲検索のベストプラクティス比較

条件精度可読性実務向き
BETWEEN△(時刻付きデータで注意)
>= AND <=
>= AND < 次月1日◎(漏れない)◎(最も安全)

6. まとめ

SQLで日付条件を扱う際には、データが 日付型か datetime型か によって書き方を変える必要があります。

  • 日付型なら BETWEEN でも問題ない

  • 時刻を含む型(datetime/timestamp)なら
     ➡ 「終了日 < 翌月1日」の書き方が安全

Ads by Google