Snowflake查询中where子句中的日期解析问题

问题描述

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

ERROR in ./resources/js/app.js
Module not found: Error: Can't resolve '@/view/pages/auth/Auth' in 'G:\TicketSystemDashboard\resources\js'
 @ ./resources/js/app.js 17:0-42 18:22-26
 @ multi ./resources/js/app.js ./resources/sass/app.scss

问题是,运行此查询的数据在date列中有问题。例如,一个值可以是一位数字(例如select * from table_a where id < 100 and date < ??? )。我不希望查询在这些行上中断。这就是为什么我希望在2子句中写一个case来只考虑日期为where的记录。我尝试了以下操作,但返回语法错误

YYYY-MM-DD

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

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

您可以假设and date < case WHEN date like '____-__-__' then current_date() else NULL 没有问题。如果需要,甚至可以用一些硬编码的值替换它。

如何编写此查询

解决方法

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

因此,您可以在日期比较旁边应用不为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