我在/ AB / 25MAR92 /和/ AB / 25MAR1992 /列中有文字。我试图从列中提取25MAR92和25MAR1992,以便进行日期计算。你可以帮忙解决这个问题的REGEXP_SUBSTR功能吗? 谢谢!
答案 0 :(得分:2)
你可以尝试:
\b\d{1,2}[A-Z]{3}\d{2,4}\b
但这也会匹配02MAR992
。要排除这种可能性,请使用:
\b\d{1,2}[A-Z]{3}(?:\d{2}|\d{4})\b
这将与02MAR1992
和02MAR92
匹配,但与02MAR992
不匹配。
答案 1 :(得分:1)
我建议使用这样的模式:
\/(\d{2}[A-Z]{3}(19|20)?\d{2})\/
如果您不希望在\d{2}
天允许任何2位数值,则
您可以添加此模式,而不是匹配01-31的(0[1-9]|[12][0-9]|3[01])
;
\/((0[1-9]|[12][0-9]|3[01])[A-Z]{3}(19|20)?\d{2})\/
或者,如果您允许/AB/2MAR92/
之类的日期没有前导零的日期
改为添加(0[1-9]|[12][0-9]|3[01]|[1-9])
:
\/((0[1-9]|[12][0-9]|3[01]|[1-9])[A-Z]{3}(19|20)?\d{2})\/
我使用/
作为锚点。如果您不喜欢,可以使用\b
。
根据您的最新评论,我推荐的模式如下:
\b\d{1,2}[A-Z]{3}(?:19|20)?\d{2}\b