一貫性のない文字列がたくさんある列があります。それらのいくつかには、抽出したい'2015mmdd_AB_CD_EFG_(text)_(text)_HIJ'
の一貫したパターンを持つ部分文字列が含まれています。これは正規表現と部分文字列コマンドのクロスオーバーケースだと思います。
これまでの私の最善のアプローチはかなり醜いです
substring(col_name, '........_.._.._..._.+_.+_...')
これは出力を希望どおりに終了しませんが、出力は「(...)_ HIJ_blablabla」のようになります。
この場合、パターン認識と部分文字列選択を効果的に組み合わせるにはどうすればよいですか?
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]+\)')