SQL使用regexp_subtr提取日期子字符串

问题描述

我有一个名为 signal_notes 的字段,其中包含如下字符串(这将是 signal_notes 的单个值):

"{ ^search_date^: ^2021-01-05^,^filing_date^: ^^,^expiry_date^: ^^,^other_liens^: ^^,^who_1st_positon^: ^^,^who_2nd_position^: ^^,^who_3rd_position^: ^^,^priority_from_1^: ^^,^priority_from_2^: ^^,^priority_from_3^: ^^,^notes^: ^^ 
^client_facing_notes^: ^^ 
 }"

有时,^expiry_date^ 行会在 ^ 之间有一个日期,格式为“YYYY-MM-DD”。

我的新字段 expiry_date 最好采用“YYYY-MM-DD”格式,带有来自 signal_notes 字段的日期字符串。

这是我目前得到的,但它什么也没有返回。

select
(regexp_substr(signal_notes,'expiry_date [0-9-]*' )) as expiry_date
from db

我也试过

(regexp_substr( signal_notes,'^expiry_date^: ^[0-9-]*^' )) as first_as_of_date_context

结果相同。

欢迎任何建议

解决方法

如果我理解正确,您需要一个子表达式。 ^ 是一种痛苦,一种解决方法是:

regexp_substr(signal_notes,'.expiry_date.: .([0-9-]*).',1,'e')

这与您上次尝试非常相似,只是它具有子表达式,因此它应该只返回日期。

您还应该能够使用 \\ 作为转义字符:

regexp_substr(signal_notes,'\\^expiry_date\\^: \\^([0-9-]*)\\^','e')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...