问题描述
我正在运行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