我有一个文本列的实例化视图,该视图提取了代表日期的数字字符串。
使用以下功能创建实例化视图:
(regexp_replace(left(substring(lower(replace(content,' ','_')) from 're-inspection_date:_(.*)_'),10),'\D','','g'))
并以MMDDYYYY格式输出文本字符串,除了,它不说明单位月份和日期的前导零。
当我尝试使用“ 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位数字。
结果,我还没有办法在月/日/年值之间插入定界符。
是否可以在不更改我的正则表达式的情况下将这些输出字符串更改为日期格式?
如果没有,我如何更改我的正则表达式以提取这些值?
请记住,我在源文本中的日期格式为12/1/2018,并且也不考虑几天或几个月内的前导0。此外,在目标日期之前的另一个日期以相同的格式设置了文本。
以下是源文本的示例:
删减的东西的地方所有者文本BLAH BLAH **** Loremipsum 11/28/2018 4:21:37 PM **** 1设施信息许可证 编号:12-34-56789设施名称:Dolor sit amet-consectetur 地址:邮编:123 Fake Street City; adipiscing elit12345结果:sed 做Eiusmod时间:到8:00 AM重新检查日期:12/4/2018类型:Blah型的东西等等:Dolor坐在amet-consectetur ...
我要的是“重新检查日期:2018年12月4日”。
我在使用Postgres 11。
答案 0 :(得分:1)
我猜Kaushik Nayak是正确的。使用正则表达式(?<=重新检查日期:),并允许使用任意数量的整数[0-9] *和一个斜杠/ {1}
分隔,我在此正则表达式中得到相同的结果SELECT to_date(substring('string'
from '(?<=Re-Inspection Date: )[0-9]*/{1}[0-9]*/{1}[0-9]*'), 'mm/dd/yyyy');
答案 1 :(得分:0)
您可以使用重复{}
模式指定不同长度的整数
select to_date(substring(lower(content)
from 're-inspection date:\s*(\d{1,2}/\d{1,2}/\d{4})' ),'mm/dd/yyyy') from t