以下の形式の大きなjsonオブジェクトを持つ1つの列を持つテーブルがあります。列のデータ型は VARCHAR です
column1
--------
{"key":"value",....}
列データの最初の値に興味があります
正規表現では.*?:(.*),.*
、 group(1) で値を与えることでそれを行うことができます
選択クエリでどのように使用できますか
そうしないでください、それは悪いデータベース設計です。キーと値を列として独自のテーブルに細断処理するか、XMLデータ型を使用します。構造に適切なインデックスを付けることができ、データに対してXPATHクエリを使用できるため、XMLは正常に機能します。XPATHは正規表現をネイティブにサポートします。
xQuery で正規表現を使用できます。SQL クエリまたは FLORW クエリから一致する関数を呼び出すだけです。
これは、SQL から正規表現を使用する方法の例です。
db2 "with val as (
select t.text
from texts t
where xmlcast(xmlquery('fn:matches(\$TEXT,''^[A-Za-z 0-9]*$'')') as integer) = 0
)
select * from val"
詳細については:
DB2 for z/OS では、PASSING オプションを使用して変数を XMLQUERY に渡す必要があります。
db2 "with val as (
select t.text
from texts t
where xmlcast(xmlquery('fn:matches($TEXT,''^[A-Za-z 0-9]*$'')'
PASSING t.text as "TEXT") as integer) = 0
)
select * from val"
残念ながら、DB2 には正規表現機能が組み込まれていません。ライブラリでこれを追加する方法に関する記事を見つけました:
http://www.ibm.com/developerworks/data/library/techarticle/0301stolze/0301stolze.html
正規表現がなければ、この操作は面倒です。文字列を 1 文字ずつ調べて最初の値を見つける関数を作成できます。または、これ以上の操作を行う必要がある場合は、json を解析してキー/値のテーブルにスローする手順を作成できます。しかし、どちらも面白く聞こえません。