1

以下の形式の大きなjsonオブジェクトを持つ1つの列を持つテーブルがあります。列のデータ型は VARCHAR です

column1
--------
{"key":"value",....}

列データの最初の値に興味があります

正規表現では.*?:(.*),.*、 group(1) で値を与えることでそれを行うことができます

選択クエリでどのように使用できますか

4

4 に答える 4

2

そうしないでください、それは悪いデータベース設計です。キーと値を列として独自のテーブルに細断処理す​​るか、XMLデータ型を使用します。構造に適切なインデックスを付けることができ、データに対してXPATHクエリを使用できるため、XMLは正常に機能します。XPATHは正規表現をネイティブにサポートします。

于 2012-12-16T12:09:41.237 に答える
1

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"

詳細については:

于 2014-04-28T12:23:10.480 に答える
0

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"
于 2015-12-17T13:32:25.000 に答える
0

残念ながら、DB2 には正規表現機能が組み込まれていません。ライブラリでこれを追加する方法に関する記事を見つけました:

http://www.ibm.com/developerworks/data/library/techarticle/0301stolze/0301stolze.html

正規表現がなければ、この操作は面倒です。文字列を 1 文字ずつ調べて最初の値を見つける関数を作成できます。または、これ以上の操作を行う必要がある場合は、json を解析してキー/値のテーブルにスローする手順を作成できます。しかし、どちらも面白く聞こえません。

于 2012-09-28T08:06:27.047 に答える