2017-12-26 25 views
1

列内の文字の4番目のインスタンスまでのテキストをどのように抽出できますか?Postgres:文字列のN番目の文字までのテキストを抽出します。

filter_typeから4番目の>文字までのテキストを選択しています。これを実現するために

、私は第四>文字の位置を見つけるためにしようとしてきたが、それは働いていない:

select substring(filter_type from 1 for position('>' in filter_type)) 

答えて

1

あなたはPostgresのでpattern matching機能を使用することができます。

最初にというパターンを見つけ、4番目の>文字までをキャプチャします。

([^>]*>) 

はその後4回>

([^>]*>){4} 
の第四のインスタンスを取得することをキャプチャ:

あなたは非>文字をキャプチャし、サブグループを作成する必要があり、あなたのパターンを開始し、1つの>文字に

次に、一致するものが4つのインスタンスすべてを返すように、グループ内でラップする必要があります。

(([^>]*>){4}) 

と必ずそれだけで(ない真ん中の)文字列の先頭から一致して作るために良い測定のための文字列シンボルの開始を置く:

^(([^>]*>){4}) 

Here's a working regex101 example of that!

あなたはパターンを持っていたら、最初のグループ要素(右側のパネルのオンライン正規表現でわかる)で必要なものを返す場合は、SQLでその要素を選択する必要があります。

Postgresでは、substring functionには正規表現パターンを使用して、部分文字列の 'from'ステートメントを使用して入力からテキストを抽出するオプションがあります。

すべてにまとめてください!

select substring(filter_type from '^(([^>]*>){4})') 
from filter_table 

See a working sqlfiddle here

0
substring(filter_type from '^(([^>]*>){4})') 

ストリングのこのフォームでは、正規表現パターンに一致する文字列の一部を抽出することができます。

関連する問題