導入記事にある通りエクセルの神髄さんのSQL基礎問題にチャレンジしていきます。
お題
【SQL問題】※初級問題なのか?
— エクセルの神髄 (@yamaoka_ss) 2025年10月27日
列「ID」は「 ○○-nnn-mmm 」の形式です。
(nnnやmmmは数値だが桁数は不定、2桁や3桁。)
このとき、
「nnn」が偶数である行だけを抽出するSQL文を作成してください。
テーブル名は任意。
※関数は使い慣れたRDBMSで構いません。
※画像はExcelです。 pic.twitter.com/QgmvuDV7Ur
言語化
SQLを書く前にまずは問題文からやるべき作業を抽出します。
- 4文字目から、その後に初めて出現する「-」の手前まで抽出
- 上記で抽出した数値の偶数判定を行う
- 偶数判定した行を抽出
SQL化
言語化1はIDの頭が「○○-」という3文字であるという想定に立っています。
この前提が覆るようであれば4文字目からではなく、1つ目の「-」の後の文字からという条件に変更する必要があります。
select mid(ID, 4, instr(4, ID, '-') - 4) as ID抽出 from [Q2$A1:B11]
SQLの結果は以下のとおりです。
IDの内2つの「-」で囲われた真ん中の部分が抽出されています。

この値をこの後で数値計算に使用しますので、念のため数値に変換します。
select val(mid(ID, 4, instr(4, ID, '-') - 4)) as 数値化 from [Q2$A1:B11]

次に言語化2の偶数判定を行います。
偶数判定にはExcel VBAでおなじみのmodを使用します。
結果として「-1」が表示されているものが「TRUE」(偶数)になります。
select val(mid(ID, 4, instr(4, ID, '-') - 4)) mod 2 = 0 as 偶数判定 from [Q2$A1:B11]

上記でお題である「「nnn」が偶数である行だけを抽出する」を実現できましたので、このSQL文をWhere句に指定してSQL文を完成させます。
select * from [Q2$A1:B11] where val(mid(ID, 4, instr(4, ID, '-') - 4)) mod 2 = 0
