首页 > 解决方案 > 我需要一个查询来从 teradata 中的评论字符串中获取日期,无论其位置如何

问题描述

例如:评论是“Drop table on 12-09-2010”或评论是“12-09-2010”或评论是“Drop 12-09-2010”

答案应该是日期格式,无论字段位置在 teradata 中的位置

标签: sqlteradata

解决方案


您可以使用REGXP_SUBSTR。根据您的 MM-DD-YYYY 日期格式,它应该是:

regexp_substr(<your column>,'((0|1)\d{1})-((0|1|2)\d{1})-((19|20)\d{2})')

编辑:这是一个稍微好一点的正则表达式,它将更接近处理无效日期。我认为任何正则表达式都无法告诉您 2020-02-30 之类的日期不是合法日期。

regexp_substr(some_col,'(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])-[0-9]{4}')

推荐阅读