【发布时间】:2019-06-25 16:24:04
【问题描述】:
我有一个文本列的物化视图,它提取代表日期的一串数字。
物化视图是使用以下函数创建的:
(regexp_replace(left(substring(lower(replace(content,' ','_')) from 're-inspection_date:_(.*)_'),10),'\D','','g'))
并以 MMDDYYYY except 的格式输出一个文本字符串,它不考虑个位数月份和日期的前导零。
当我尝试使用“to_date”函数指定格式 MMDDYYYY 时:
(to_date(regexp_replace(left(substring(lower(replace(content,' ','_')) from 're-inspection_date:_(.*)_'),10),'\D','','g'),'MMDDYYYY'))
我收到错误“日期/时间字段值超出范围:'12122018'”。
我认为问题是由以下一个或两个原因引起的:
由于我的正则表达式删除了所有非整数字符,物化视图中当前正则表达式生成的字符串长度不同(例如 12212018 8222018 962018)。日期的长度为 6、7 或 8 位。
因此,我还没有想出在月/日/年值之间插入分隔符的方法。
有没有办法在不更改我的正则表达式的情况下将这些输出字符串更改为日期格式?
如果没有,我该如何更改我的正则表达式以提取这些值?
请记住,我在源文本中的日期格式为 2018 年 12 月 1 日,并且不包括以天或月为单位的前导 0。此外,在以相同方式格式化的文本中,在目标日期之前还有另一个日期。
这里是源文本的示例:
已编辑内容的占位符文本 BLAH BLAH BLAH **** 洛雷米普苏姆 2018 年 11 月 28 日下午 4:21:37 ****1 of 2 设施信息许可证 号码:12-34-56789 设施名称:Dolor sit amet-consectetur 地址:123 Fake Street City,邮编:adipiscing elit12345 结果:sed 做 Eiusmod 时间:上午 8:00 重新检查日期:12/4/2018 类型:Blah-Type Stuff 等:Dolor sit amet-consectetur...
“重新检查日期:2018 年 12 月 4 日”是我所追求的。
我在 Postgres 11 上。
【问题讨论】:
标签: regex postgresql materialized-views regexp-replace to-date