コマンド道場
BETWEEN 述語難易度 ★★☆☆☆

期間で受注を絞り込む

2025-11-05 から 2025-12-24 までに受注された、取消されていない受注(status が 'done')を取り出してください。列は「受注番号, 受注日, 顧客名」の順、受注日の古い順に並べてください。両端の日付も含みます。

この書き方が使えない製品があります そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database

未確認: IBM Db2

製品ごとの対応表(実測)を見る

  • BETWEEN a AND b は両端を含みます。端を含めたくないときは不等号で書きます。
  • 日付を文字列で書いたときの解釈には製品差があります。この演習では 'YYYY-MM-DD' がそのまま日付として解釈されます。
● 起動中…

この問題で使えるテーブル(名前をタップすると入力できます)

10

NULL
🔑int不可
int不可
date不可
text不可
データを見る(先頭 5 行)
juchu_idkokyaku_idjuchu_onstatus
100112025-11-05done
100222025-11-18done
100312025-12-02done
100432025-12-09cancel
100542025-12-24done

17

NULL
🔑int不可
🔑int不可
int不可
int不可
numeric(10,0)不可
データを見る(先頭 5 行)
juchu_idgyo_noshohin_idsuryotanka
10011120180
10012230120
100214223800
100225118500
10031644200

5

NULL
🔑int不可
text不可
text
date不可
データを見る(先頭 5 行)
kokyaku_idkokyaku_nameprefcreated_on
1青葉工業東京都2024-05-10
2白樺物産大阪府2024-08-01
3黒松システム東京都2025-01-15
4赤坂商会NULL2025-03-20
5三田商事愛知県2025-06-01

7

NULL
🔑int不可
text不可
text不可
numeric(10,0)不可
データを見る(先頭 5 行)
shohin_idshohin_namecategoryprice
1ノート文具180
2ボールペン文具120
3付箋文具250
4デスクチェア家具24800
5書棚家具18500

解説

結論

BETWEEN 下限 AND 上限 と書きます。両端を含みます。

なぜ

期間の絞り込みは >= と <= を AND でつないでも同じ結果になりますが、BETWEEN の方が意図が読み取りやすく、片方だけ不等号を間違える事故が起きにくくなります。

⚠️ BETWEEN は下限より上限を小さく書いても構文エラーになりません。その場合は 1 行も返らない、という結果だけが返ります。エラーが出ないぶん、原因を探すのに時間がかかる種類の間違いです。

⚠️ 時刻を持つ列(timestamp)に BETWEEN '2025-12-01' AND '2025-12-31' と書くと、12/31 の 00:00:00 までしか含まれず、12/31 の日中の行が落ちます。この演習の juchu_on は日付だけを持つ date 型なのでこの問題は起きませんが、実務では「翌日の 00:00 より前」と書く方が安全です。

よくある間違い

①両端を含むかどうかを取り違える。②期間の条件だけを見ていて、取消などの状態の条件を忘れる。

根拠(一次情報)