状況
9 月の注文件数を出す SQL を AI アシスタントに書かせた。ordered_at は 'YYYY-MM-DD HH:MM:SS' 形式の TEXT 列。経理の数字と合わないと言われた。DB は SQLite。
9 月分を漏れなく数えるよう正しく直したものは?
SELECT COUNT(*) AS n FROM ordersWHERE ordered_at BETWEEN '2026-09-01' AND '2026-09-30';正答
- SELECT COUNT(*) AS n FROM orders WHERE ordered_at BETWEEN '2026-09-01' AND '2026-09-30 23:59';
- SELECT COUNT(*) AS n FROM orders WHERE ordered_at >= '2026-09-01' AND ordered_at < '2026-10-01';
- SELECT COUNT(*) AS n FROM orders WHERE ordered_at > '2026-08-31' AND ordered_at <= '2026-09-30';
- SELECT COUNT(*) AS n FROM orders WHERE ordered_at LIKE '2026-9-%';
解説
ordered_at は時刻つきの文字列なので、'2026-09-30 18:00:00' は '2026-09-30' より大きいと判定され、BETWEEN の上限に入らない。AI は日付だけの列を想定した書き方を出しがちで、末日の注文がまるごと漏れる。「9/1 以上、10/1 未満」と半開区間で書けば時刻の有無に関係なく正しく数えられる。'23:59' まで延ばしても 23:59:30 のような秒つきの行が漏れる。'> 2026-08-31' は 8/31 の時刻つきの行を拾ってしまい、末日の漏れも残る。LIKE '2026-9-%' は月が 2 桁で保存されているので 1 行も一致しない。
参考: www.sqlite.org
この問題を含む AI の出力チェック のテストを制限時間つきで解く
AI の出力チェッククイズへ