Snowflake 查询中 where 子句中的日期解析问题
Date parsing issue in the where clause in Snowflake query
我是 运行 Snowflake 查询,旨在 return 记录除其他外,日期早于当前日期。
select *
from table_a
where id < 100 and
date < ???
问题是,此查询所依据的数据 运行 在日期列中存在问题。例如,一个值可能是单个数字(如 2
)。我不希望查询在这些行上中断。这就是为什么我希望在 where
子句中写一个 case
以仅考虑日期为 YYYY-MM-DD
的记录。我尝试了以下方法,但它是 returning 语法错误:
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()
没有问题。如果需要,它甚至可以用一些硬编码值替换。
如何编写此查询?
使用TRY_TO_DATE(date,'YYYY-MM-DD')
,因为它会尝试将其转换为日期,当格式无效时,它将自动变为 NULL
因此,您可以在日期比较旁边应用一个过滤器 is not NULL。
https://docs.snowflake.com/en/sql-reference/functions/try_to_date.html
您可以为此使用正则表达式
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
我是 运行 Snowflake 查询,旨在 return 记录除其他外,日期早于当前日期。
select *
from table_a
where id < 100 and
date < ???
问题是,此查询所依据的数据 运行 在日期列中存在问题。例如,一个值可能是单个数字(如 2
)。我不希望查询在这些行上中断。这就是为什么我希望在 where
子句中写一个 case
以仅考虑日期为 YYYY-MM-DD
的记录。我尝试了以下方法,但它是 returning 语法错误:
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()
没有问题。如果需要,它甚至可以用一些硬编码值替换。
如何编写此查询?
使用TRY_TO_DATE(date,'YYYY-MM-DD')
,因为它会尝试将其转换为日期,当格式无效时,它将自动变为 NULL
因此,您可以在日期比较旁边应用一个过滤器 is not NULL。
https://docs.snowflake.com/en/sql-reference/functions/try_to_date.html
您可以为此使用正则表达式
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