2017-08-18 21 views
2

Teradataでは、いくつかの数字のパターンを見つけて、次に空白を入れたり、スペースを入れずに「SF」を探す正規表現パターンを探しています。これは、以下の両方のケースでは7を返す必要があります:Teradataの正規表現、0または1のスペース

SELECT 
REGEXP_INSTR('12345 1000SF', pattern), 
REGEXP_INSTR('12345 1000 SF', pattern) 

それとも、私の実際の目標は、おそらくREGEXP_SUBSTRを使用して、簡単な方法があるかどうどちらの場合も、1000年を抽出することです。必要な場合は、さらに詳しい情報が下記にあります。

私はフリーテキストを含むコラムを持っており、私は平方の映像を抽出したいと思います。しかし、いくつかのケースでは、番号と「SF」の間にスペースがあり、いくつかのケースではありません。

'other stuff 1000 SF' 
'other stuff 1000SF' 

私は開始位置を見つけるために、REGEXP_INSTR関数を使用しようとしています。グーグルを通して、私は最初は

'([0-9])+ SF' 

私は2番目のためのパターンを試してみることをするときのために、私は

'([0-9])+SF' 

を試してみて、私は

SELECT Failed. [2662] SUBSTR: string subscript out of bounds 

エラーを取得するパターンを発見しました私も同様の質問にanswerが見つかりましたが、Teradataではうまくいきません。たとえば、私はあなたが使用できるとは思わない? Teradataでこのような

+1

'[0-9] + SF 'を試してください。キャラクタクラスをグループに入れ、キャラクタクラスアトムの代わりにグループを数量化するという点はありません。 –

+0

@WiktorStribiżew()を含めると同じエラーが表示されます。エラーの原因となっていることがあります。 – Graphth

+1

'? 'を使うことができないなら、' [0-9] + SF | [0-9] + SF'のようなパターンでパターンをマッチさせるだけです。 – CAustin

答えて

2

エラーメッセージは、SUBSTR、ないREGEXP_SUBSTRを使用しているを示しています。

はこれを試してみてください:

RegExp_Substr(col, '[0-9]*(?= {0,1}SF)') 

は、複数の数字がSFと、それらの数字を抽出に続いて、単一の任意の空白が続いて下さい。

+0

REGEXP_SUBSTR関数がここの数値だけを返すようにするのは何ですか?私はオンラインのドキュメントを見ていますが、パターンを見つけてパターンの一部を取得するこのような例はありません。これは非常に強力です。 – Graphth

+0

これは 'regexp_substr'がすることです - 正規表現に基づいて文字列の一部をつかんでください。 – Andrew

+0

'(?= ....)'は、いわゆるルックアヘッド(look-ahead)であり、パターンを結果に追加せずにチェックします。 Btw、Teradataは "Perl Compatible Regular Expressions"(PCRE)構文をサポートしていますが、文書はあまりありませんが、多くのオンラインリソースがあります。 – dnoeth

2

私は考えパターンを:

\b(\d+)\s*[Ss][Ff]\b 

\b # word boundary 
(\d+) # 1 or more digits (captured) 
\s* # 0 or more white-space characters 
[Ss] # character class 
[Ff] # character class 
\b # word boundary 

Demo

+0

この回答に感謝します。それは有用でもありました。 – Graphth

関連する問題