gpt4 book ai didi

regex - postgres 日期验证正则表达式

转载 作者:行者123 更新时间:2023-11-29 12:19:25 25 4
gpt4 key购买 nike

我在 postgres 中有一个大表,其中大部分日期都是 DD-Mon-YY 格式,但有些行不遵循这种模式,可以被视为垃圾值。当我尝试在此列上运行任何日期函数时,查询失败并显示此垃圾值不是有效日期格式的错误消息。

我的意图是通过编写 case 语句来跳过包含垃圾值的行。我只想处理那些遵循有效日期格式的行,即“DD-Mon-YY”。

我已经为日期编写了以下正则表达式模式,当我在在线正则表达式测试器上测试它时它工作正常但不适用于 postgres。我是 postgres 的新手,所以请让我知道我在这里遗漏了什么。

当我期望它返回 True 时,下面的代码片段返回 False

SELECT '23-Dec-83' ~ '^\d{2}-[a-zA-Z]{3}-\d{2}$'

最佳答案

您的正则表达式返回真值,但效果不佳。

  1. 您应该尽量避免将日期存储为字符串/varchar。这会导致几个问题。
  2. 尝试使用正确的数据类型。如果是日期,则为日期。

然而,处理您的情况的更好的正则表达式可能是:

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

即使是

这样的格式,您的正则表达式也会返回 True
SELECT '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

这在理想情况下是错误的。

关于regex - postgres 日期验证正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com