危険察知4 択難易度 応用

状況

2026 年より前のログを消す前の確認。created_at は 'YYYY-MM-DD' 形式の TEXT 列で、2025-11-30、2025-12-31、2026-01-15、2026-05-01、2026-10-16 の 5 行がある。作業者が条件を手で打った。

この確認 SELECT の結果は?

SELECT COUNT(*) AS n FROM logsWHERE created_at < '2026-1-1';

正答

  1. 2。日付として比べられ、2025 年の 2 行だけが一致する
  2. 4。文字列比較で 2026 年 1 月と 5 月も含まれる
  3. 5。形式がそろっていないので、全行が一致する
  4. 0。形式が違う値どうしは比べられず、1 行も一致しない

解説

TEXT の比較は先頭から 1 文字ずつ行われる。'2026-01-15' と '2026-1-1' は 6 文字目の '0' と '1' で比べられ、'0' のほうが小さいので「より前」と判定される。'2026-05-01' も同じ。結果は 4 で、このまま DELETE すると 2026 年 1 月と 5 月のログまで消える。'2026-01-01' と書けば 2 になる。「2 件のはず」と予想してから実行し、数が違えば止まる。形式が違っても比較自体はエラーにならない。

参考: www.sqlite.org

sqldatestring-compare

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ