如何在 Postgresql 中提取子字符串模式
How to extract a substring pattern in Postgresql
我有一个列有很多不一致的字符串。其中一些包含我想提取的具有一致模式 '2015mmdd_AB_CD_EFG_(text)_(text)_HIJ'
的子字符串。我觉得这是正则表达式和子字符串命令的交叉情况。
到目前为止我最好的方法是一个相当丑陋的
substring(col_name, '........_.._.._..._.+_.+_...')
它没有按预期结束输出,而是输出类似于“(...)_HIJ_blablabla”。
在这种情况下如何有效地结合模式识别和子串选择?
假设 2015mmdd
实际上意味着某种 "date",因此真实数据包含例如20150713
将执行以下操作:
substring(col_name, '[0-9]{8}_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')
此 returns 子字符串以 8 个数字开头,后跟一个下划线,后跟两个大写字符,后跟一个下划线,后跟两个大写字符,再后跟一个下划线,后跟三个大写字符,再后跟一个下划线后跟左括号,后跟至少一个小写字母,后跟右括号,再后跟下划线,再后跟左括号,再后跟至少一个小写字符,后跟右括号。
如果 2015mmdd
确实意味着 2015
后跟字符串 mmdd
那么你需要这个:
substring(col_name, '[0-9]{4}mmdd_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')
我有一个列有很多不一致的字符串。其中一些包含我想提取的具有一致模式 '2015mmdd_AB_CD_EFG_(text)_(text)_HIJ'
的子字符串。我觉得这是正则表达式和子字符串命令的交叉情况。
到目前为止我最好的方法是一个相当丑陋的
substring(col_name, '........_.._.._..._.+_.+_...')
它没有按预期结束输出,而是输出类似于“(...)_HIJ_blablabla”。
在这种情况下如何有效地结合模式识别和子串选择?
假设 2015mmdd
实际上意味着某种 "date",因此真实数据包含例如20150713
将执行以下操作:
substring(col_name, '[0-9]{8}_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')
此 returns 子字符串以 8 个数字开头,后跟一个下划线,后跟两个大写字符,后跟一个下划线,后跟两个大写字符,再后跟一个下划线,后跟三个大写字符,再后跟一个下划线后跟左括号,后跟至少一个小写字母,后跟右括号,再后跟下划线,再后跟左括号,再后跟至少一个小写字符,后跟右括号。
如果 2015mmdd
确实意味着 2015
后跟字符串 mmdd
那么你需要这个:
substring(col_name, '[0-9]{4}mmdd_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')