web-dev-qa-db-ja.com

Postgresqlで部分文字列パターンを抽出する方法

一貫性のない文字列がたくさんある列があります。それらのいくつかには、抽出したい'2015mmdd_AB_CD_EFG_(text)_(text)_HIJ'の一貫したパターンを持つ部分文字列が含まれています。これは正規表現と部分文字列コマンドのクロスオーバーケースだと思います。

これまでの私の最善のアプローチはかなり醜いです

substring(col_name, '........_.._.._..._.+_.+_...')

これは出力を希望どおりに終了しませんが、出力は「(...)_ HIJ_blablabla」のようになります。

この場合、パターン認識と部分文字列選択を効果的に組み合わせるにはどうすればよいですか?

7
thenaturalist

2015mmddが実際にはある種の「日付」を意味すると仮定すると、実際のデータには次のようなものが含まれます。 20150713次のようになります。

substring(col_name, '[0-9]{8}_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')

これは、8つの数字、アンダースコア、2つの大文字、アンダースコア、2つの大文字、アンダースコア、3つの大文字、アンダースコア、開始括弧、atで始まるサブストリングを返します。小文字を1つ、閉じ括弧、アンダースコア、開始括弧、少なくとも1つの小文字、閉じ括弧の順にリースします。

2015mmddが実際に2015の後に文字列mmddが続くことを意味する場合は、次のようにする必要があります。

substring(col_name, '[0-9]{4}mmdd_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')
13