【问题标题】:Date parsing issue in the where clause in Snowflake querySnowflake 查询中 where 子句中的日期解析问题
【发布时间】:2020-12-08 12:26:56
【问题描述】:

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

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

问题是,运行此查询的数据在日期列中存在问题。例如,一个值可能是单个数字(如2)。我不希望查询在这些行上中断。这就是为什么我希望在where 子句中写一个case 以仅考虑日期为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() 没有问题。如果需要,它甚至可以用一些硬编码的值替换。

我该如何编写这个查询?

【问题讨论】:

    标签: sql database snowflake-cloud-data-platform snowflake-schema snowsql


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

      • 莫奈姆分享的方案更优雅
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多