Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

SQL基礎問題2:文字列nnが偶数の場合のみ抽出

導入記事にある通りエクセルの神髄さんのSQL基礎問題にチャレンジしていきます。

www.excellovers.com

ExcelSQLを使う方法については上記を参照。


お題


言語化

SQLを書く前にまずは問題文からやるべき作業を抽出します。

  1. 4文字目から、その後に初めて出現する「-」の手前まで抽出
  2. 上記で抽出した数値の偶数判定を行う
  3. 偶数判定した行を抽出


SQL

言語化1はIDの頭が「○○-」という3文字であるという想定に立っています。
この前提が覆るようであれば4文字目からではなく、1つ目の「-」の後の文字からという条件に変更する必要があります。

言語化1を実現するSQLは下記のとおりです。

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


まとめ

SQLでもExcel関数のように文字列の加工を行い、特定のデータを抽出することが可能です。