LoginSignup
3
1

IBMiでもLIKE INしたい

Last updated at Posted at 2023-12-27

固定文字列から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も可。
これで将来的に五行が四行や六行になっても安心!

ちなみに

五行が含まれている都道府県は栃木県しかない。マジでどうでもいい。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1