web-dev-qa-db-ja.com

DB2SQLの正規表現

(UDFの使用以外)DB2 9.7のREGEXP-In-SQLサポートはありますか?

11
Samer Buna

DB2 9.7には、正規表現の組み込みサポートはありません。

唯一の方法は、コメントに追加された記事「OMGPonies」で説明されているようにUDFまたはテーブル関数を使用することです。

@ dan1111:特に人々が質問を正しく読めない場合、私の投稿が編集されていることに感謝しません。 OPからの質問任意のREGEXP-In -[〜#〜] sql [〜#〜] DB2 9.7のサポート

SQLはXQueryではありません!!!

申し訳ありませんが、100%正解のテキストを削除しないでください。コメントを追加したり、独自の回答を書き込んだりできます。

3
tessus

本当の答えは、Matchs関数を使用してxQueryを介してPureXMLが追加された(v9.7を含む)ため、DB2は正規表現をサポートしているということです。

例えば:

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"

詳細については:

6
AngocA

コミコニ(小西圭佑)です。

Db2には存在しない正規表現関数(UDF)を作成しました。 SQL/XML(Xquery)を使用するUDF。簡単にインストールできます。

正規表現のリストはUDFを提供します

  1. REG_MATCHESは一致の存在を提供します(スカラー)
  2. REG_REPLACE文字列置換(スカラー)
  3. REG_COUNT取得された一致の数(スカラー)
  4. REG_POSITION一致位置の取得(スカラー)
  5. REG_SUBSTRは文字列照合を取得します(Scalar)
  6. REG_SUBSTR_TABLE一致する文字列情報のリスト(表)
  7. REG_TOKENIZE_TABLE不一致の文字列情報のリスト(区切り文字列で分割)(表)
  8. REG_ALLTOKEN_TABLE不一致文字列と一致する文字列情報のリスト(表)

スクリプトはここからダウンロードできます。 (日本語でごめんなさい)

https://www.ibm.com/developerworks/jp/data/library/db2/j_d-regularexpression/

(英語: 機械翻訳 スクリプト:日本語ページの最後)

皆様からのフィードバックやコメントをお待ちしております。

6
komikoni

DB2 11.1以降、組み込みの正規表現サポートがあります。新しい関数の1つは REGEXP_SUBSTR そして他にもいくつかあります。

SELECT REGEXP_SUBSTR('hello to you', '.o',1,1) 
   FROM sysibm.sysdummy1
5
data_henrik

これは、DB2 z/OSを除いて正常に機能します。DB2v10z/ OSでは、次のようにPASSINGを使用する必要があります。

   with val as (
     select t.text
     from texts t
     where xmlcast(xmlquery('fn:matches($v,"^[A-Za-z 0-9]*$")'
                    PASSING t.text as "v" ) as integer) = 0
    )
    select * from val
5
AidanH