数据值格式错误无效

时间:2016-09-16 19:36:59

标签: postgresql amazon-redshift

我试图运行仅包含过去90天数据的查询,但查询返回错误"数据值...格式无效"。

查询是:

select name, diff
from
    (select name, (getdate()::date - to_date(split_part(name, ' ', 1),'MM/DD/YYYY')::date) as diff
    from sample_table)
where diff<=90;

奇怪的是,操作getdate()::date - to_date(split_part(name, ' ', 1),'MM/DD/YYYY')::date按预期工作,但当限制为&lt; = 90时,它会返回此错误。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

使用以下代码查找错误的行:

select split_part(name,' ',1) original_value, name
from sample_table
where split_part(name,'1') !~ '^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$'

这使用正则表达式来确定该字段的该部分是否有有效日期 - 如果没有,则返回该字段,以便您可以找到它。