0

我正在运行一个 Snowflake 查询,该查询旨在返回日期早于当前日期的记录。

select *
from table_a
where id < 100 and
date < ???

问题是,运行此查询的数据在日期列中存在问题。例如,一个值可能是单个数字(如2)。我不希望查询在这些行上中断。这就是为什么我希望casewhere子句中写一个只考虑日期为YYYY-MM-DD. 我尝试了以下方法,但它返回语法错误:

and date = case WHEN date like '____-__-__' then date < current_date() else NULL

and date < case WHEN date like '____-__-__' then current_date() else NULL

(如果由于格式原因它不可见,即 4 个下划线 - 表示任何字符,后跟一个破折号,然后是 2 个下划线,然后是一个破折号,然后是另外两个下划线。)

你可以假设current_date()没有问题。如果需要,它甚至可以用一些硬编码的值替换。

我该如何编写这个查询?

4

2 回答 2

4

使用TRY_TO_DATE(date,'YYYY-MM-DD')它尝试将其转换为日期,当格式无效时,它将自动变为 NULL

因此,您可以在日期比较旁边应用过滤器不是 NULL。

https://docs.snowflake.com/en/sql-reference/functions/try_to_date.html

于 2020-08-19T09:30:00.620 回答
1

您可以为此使用正则表达式

SELECT * FROM (SELECT '2020-05-12' AS string) a where REGEXP_LIKE(string,'\\d{4,4}\\-\\d{1,2}-\\d{1,2}');

https://community.snowflake.com/s/article/How-to-use-snowflake-regular-expression

于 2020-08-19T11:02:54.010 回答