固定文字列からLIKE IN
したい
皆さんも一度くらいは都道府県(JAPAN.PREF
)名に五行(木・火・土・金・水)が含まれているものを抽出したいと思ったことがあるはず。
NAME |
---|
北海道 |
青森県 |
岩手県 |
... |
沖縄県 |
下記のようなSQL文が直感的だがLIKE IN
は動かない。
SELECT NAME
FROM JAPAN.PREF
WHERE NAME LIKE IN ('%木%','%火%','%土%','%金%','%水%')
正規表現を使う
IBMiでREGEXP_LIKE
という記述がサポートされている。
正規表現については別途オベンキョウする必要があるが、簡単なものであればそれほどハードルは高くない。
SELECT *
FROM JAPAN.PREF
WHERE REGEXP_LIKE(NAME,'木|火|土|金|水')
※ 今回は1文字なのでWHERE REGEXP_LIKE(NAME,'[木火土金水]')
でも良い。
結果からLIKE IN
したい
とはいえ五行もいつかは変わるかもしれないし、データベース(BANBUTSU.GOGYO
)で作っておいた方が安心。
ELEM |
---|
火 |
水 |
木 |
金 |
土 |
下記のようなSQL文が略
SELECT *
FROM JAPAN.PREF
WHERE NAME LIKE IN (
SELECT ELEM
FROM BANBUTSU.GOGYO
)
結果を集約する
IBMiでLISTAGG
という関数がサポートされている。
これとREGEXP_LIKE
を組み合わせる。
上手いこと正規表現に整形する必要があるが、separator-expression
等を駆使して頑張りましょう。
SELECT *
FROM JAPAN.PREF
WHERE REGEXP_LIKE(NAME,
SELECT LISTAGG(ELEM,'|') FROM BANBUTSU.GOGYO
)
もちろんSELECT '['||LISTAGG(ELEM)||']' FROM BANBUTSU.GOGYO
も可。
これで将来的に五行が四行や六行になっても安心!
ちなみに
五行が含まれている都道府県は栃木県
しかない。マジでどうでもいい。