PostgreSQL中动态提取job_name字段首段4位年份的SQL方案
在PostgreSQL中动态提取job_name字段中首次出现的4位数字年份
直接用PostgreSQL的正则表达式匹配功能就能解决固定位置截取的局限性,不用管前缀长度多少,精准抓取首次出现的4位数字:
基础解决方案
使用substring函数结合正则表达式,匹配字符串中第一个连续的4位数字:
SELECT job_name, substring(job_name FROM '\d{4}') AS extracted_year FROM job_header;
这个写法能自动适配各种前缀格式:
- 对于
AG_2017_AJSJGHJS8GJSJ_7_25_WK_AHGSGHGHS,返回2017 - 对于
APR3_2018_Another_Test_SC_PAMA,返回2018
进阶:限定年份范围(可选)
如果要避免提取到非年份的4位数字(比如订单号、流水号里的),可以把正则改成匹配19xx或20xx的年份范围:
SELECT job_name, substring(job_name FROM '(19|20)\d{2}') AS extracted_year FROM job_header;
原理说明
PostgreSQL的substring(string FROM pattern)会返回字符串中第一个匹配正则模式的子串,完全替代了固定位置截取的硬编码逻辑,不管前缀是2字符加下划线还是更长的不规则格式,都能准确抓到首次出现的4位数字。
内容的提问来源于stack exchange,提问作者JD2775
相关产品推荐
相关产品推荐

