我在postgres中有一个大表,其中大部分日期都是DD-Mon-YY格式,但有些行不遵循这种模式,可以视为垃圾值。 当我尝试在此列上运行任何日期函数时,查询失败,并显示错误消息,指出此垃圾值不是有效的日期格式。
我的意图是通过编写case语句来跳过包含垃圾值的行。我只想处理那些遵循有效日期格式的行,即DD-Mon-YY'。
我已经为日期编写了以下正则表达式模式,当我在在线正则表达式测试器上测试但是没有在postgres上工作时,它正在工作。我是postgres的新手,所以请让我知道我在这里失踪了什么。
当我希望它返回True时,以下代码段返回False
SELECT '23-Dec-83' ~ '^\d{2}-[a-zA-Z]{3}-\d{2}$'
答案 0 :(得分:1)
你的正则表达式正在返回true,但它并不好。
然而,处理您案件的更好的正则表达式可能是:
SELECT '30-Dec-83' ~ '^(([0-2][0-9])|([3][0-1]))-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2}$'
<强> FIDDLE DEMO 强>
即使是像
这样的格式,你的正则表达式也会返回TrueSELECT '23-Mon-83' ~ '^\d{2}-[a-zA-Z]{3}-\d{2}$' //return True
SELECT '23-Abc-83' ~ '^\d{2}-[a-zA-Z]{3}-\d{2}$' //return True
SELECT '23-Pqr-83' ~ '^\d{2}-[a-zA-Z]{3}-\d{2}$' //return True
这是理想的错误。