-2

次のようなテキスト パターンを抽出する必要があります。

NN-NNN-NNNNNNNNN 
(2digit,minus, 3digits,minus,9digits)

テキストフィールドに沿って。たとえば、特定のフィールドは次のようになります。

"fsadlk fasldkl jhkjfd khjfasd 11-333-878787618 hfsd uhjkfads"

選択行で 11-333-878787618 の sql 関数を使用して抽出する必要があります。DB2 AS400 を使用していますが、どの SQL 関数構文でも役に立ちます。

4

2 に答える 2

1

以下はその点で役立つかもしれません。抽出を追加することもできますが、ここまでたどり着いた後、すでに理解されている可能性があると考えました。

 create table patterns ( p varchar(65), find_at smallint )
 ;
 insert into  patterns values                                        
  ('fsadlk fasldkl jhkjfd khjfasd 11-333-878787618 hfsd uhjkfads',31)
 ,('weroiu 11-333-8787zz618 oiuwens snkdl osjlwhe'               ,00)
 ,('nm,sdj xhdgweufyen sndh 711-333-878787618 hfsd uhjkfads'     ,26)
 ,('nm,sdj xhdgweufyen sndh 11-333-8787876187 hfsd uhjkfads'     ,25)
 -- ....+....1....+....2....+....3....+....4....+....5....+....6.    
 ;
 select translate(p, '9', '0123456789', '9') as translated
     ,  smallint( locate( '99-999-999999999'              
                , translate(p, '9', '0123456789', '9') )  
                ) as located                              
     ,  find_at                                           
 from patterns                                            
 ; -- report from the above query follows:
TRANSLATED                                                         LOCATED   FIND_AT
fsadlk fasldkl jhkjfd khjfasd 99-999-999999999 hfsd uhjkfads            31        31
weroiu 99-999-9999zz999 oiuwens snkdl osjlwhe                            0         0
nm,sdj xhdgweufyen sndh 999-999-999999999 hfsd uhjkfads                 26        26
nm,sdj xhdgweufyen sndh 99-999-9999999999 hfsd uhjkfads                 25        25
于 2016-08-05T15:50:18.583 に答える
1

達成しようとしているものを提供する組み込みの SQL 関数はありません。これをご覧になることをお勧めします。これは、ユーザー定義関数を使用して iSeries DB2 SQL で正規表現を行う方法に関する IBM の投稿です。そして、テキストに一致する正規表現パターンは次のようになります。

\d\d-\d\d\d-\d\d\d\d\d\d\d\d\d

次の適切な正規表現パターンを使用するとよいでしょう。

\d{2}-\d{3}-\d{9}

しかし、IBM が実装したこの正規表現関数はかなり制限されています。

于 2016-08-05T13:27:26.050 に答える