REGEXP_SUBSTR问题

时间:2018-05-02 20:24:06

标签: regex teradata regexp-substr

我在/ AB / 25MAR92 /和/ AB / 25MAR1992 /列中有文字。我试图从列中提取25MAR92和25MAR1992,以便进行日期计算。你可以帮忙解决这个问题的REGEXP_SUBSTR功能吗? 谢谢!

2 个答案:

答案 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

这将与02MAR199202MAR92匹配,但与02MAR992不匹配。

答案 1 :(得分:1)

我建议使用这样的模式:

\/(\d{2}[A-Z]{3}(19|20)?\d{2})\/
  • 年限限于1900-2099。

Demo

  • 如果您不希望在\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