固定文字列から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も可。
これで将来的に五行が四行や六行になっても安心!
ちなみに
五行が含まれている都道府県は栃木県しかない。マジでどうでもいい。