2017-09-03 2 views
0

正規表現を使用してRedshiftテーブルのパターンを置き換えようとしています。私はREGEXP_RELACEで試してきましたが、これまでのところ成功していません。RedshiftテーブルでREGEXP_REPLACEを使用して文字列を並べ替える

私のデータは、列がsequenceに名前を付け、varcharデータ型には、次のようになります。

1420311 > 1380566 > 1380566 > 9991380564 
1489773 > 9991489773 
1367309 > 1367309 > 9991367309 

私は、次のような結果を得るために、SQL赤方偏移にREGEXP_RELACE(またはその他の機能)を使用したいです

1420311 > 1380566 > 1380566 > 1380564 > 999 
1489773 > 1489773 > 999 
1367309 > 1367309 > 1367309 > 999 

これは、文字列の先頭に表示されたときに999シーケンスを見つけて、最後に最後に>を置き、残りの文字列を維持します。

大変感謝しています。

+2

私は、Yを考えますouは、期待される出力の2行目にタイプミスがある可能性があります。 –

+0

999が見つかったシーケンスメンバーに従ってもらいますか(サンプル入力では常に最後に来る)、まったく最後にしたい(999が最初のシーケンスで見つかった場合あなたのサンプルに含まれていないメンバーですか? – Yunnosch

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Yunnosch

答えて

1

あなただけの、次のこの出力を生成することができ、クエリが動作するはずですしたい場合:ここで

SELECT 
    REGEXP_REPLACE(sequence, '999([0-9]{7})$', '$1 > 999') 
FROM yourTable 
+0

ありがとう、素晴らしい解決策。 RegExp私の頭をする! そして、はい、それはタイプミスでした。 –

1

がさらに

  • データベースを更新します(TIMSに基づいて)ソリューションであり、内容、
    UPDATE yourTable SET sequence = ... od SELECT ... FROM yourTable
  • メンバーの先頭に「999」が見つかり、改行の前に空白がある場合は、を使用して 何$ない
  • シーケンスの最後に移動して、
    第二キャプチャグループ
  • 内部([0-9]{1,})を使用して
    、「999」だけではなく、7digitルールを破っ数字のいずれかの主要なグループを見つけますそれは

コードの代わりに "999" のとキャプチャ:

UPDATE yourTable SET sequence = 
    REGEXP_REPLACE(sequence, '([0-9]{1,})([0-9]{7}(> [0-9]{7}){0,})', '$2 > $1') 
+0

素晴らしい。私は7桁以上の数字の先頭のグループをどのように探すのが好きです。 あなたの質問に答えて、はい、 '999'は、任意のシーケンスの最後のメンバーでのみ*期待*です。そして、はい、 'UPDATE'はうまくいくでしょう。 –

関連する問題