我有一个表,其中closure_date 表示为字符变化列。一些日期保存为“43684.5708564815”,也保存为“2019-05-24 18:51:17”。现在我需要从列中提取周数。我尝试了以下查询:
SELECT closure_date,
extract('week' from timestamp '1899-12-30' + interval '1 day' * cast(closure_date as double
precision)) as closure_week,
FROM <table_name>
LIMIT 10000
此查询对于 43684.5708564815 之类的值运行良好,但是在尝试从“2019-05-24 18:51:17”中提取 week_number 时导致错误,说明:
ERROR: invalid input syntax for type double precision: "2019-05-24 18:51:17"
SQL state: 22P02
如何处理错误?有什么建议么?
您可以使用带有正则表达式的 CASE 表达式来测试字符串的格式是否类似于 ISO 日期:
~
运算符将与closure_date
正则表达式进行比较以查看它是否与该模式匹配。请注意,如果您有不同的格式,这仍然可能失败,您需要添加更多检查。
如果有机会,您应该真正将该列更改为 a
timestamp
而不是保留这个格式错误的字符串。