AI の出力チェック4 択難易度 標準

状況

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';

正答

  1. SELECT COUNT(*) AS n FROM orders WHERE ordered_at BETWEEN '2026-09-01' AND '2026-09-30 23:59';
  2. SELECT COUNT(*) AS n FROM orders WHERE ordered_at >= '2026-09-01' AND ordered_at < '2026-10-01';
  3. SELECT COUNT(*) AS n FROM orders WHERE ordered_at > '2026-08-31' AND ordered_at <= '2026-09-30';
  4. 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

sqldateboundarybetween

この問題を含む AI の出力チェック のテストを制限時間つきで解く

AI の出力チェッククイズへ