【问题标题】:How to select whether or not a specific date is before X amount of years? - Presto SQL如何选择特定日期是否早于 X 年? - 快速 SQL
【发布时间】:2021-09-26 17:58:54
【问题描述】:

我正在尝试选择我的某一列中的日期值是否发生在一定年份之前。

我正在尝试的代码:

SELECT CASE
WHEN CAST(my_date AS DATE) + INTERVAL '10' YEAR < CURRENT_DATE THEN 'OVER 10 YEARS AGO'
ELSE NULL AS date_check

对于我正在使用的日期(例如 2019-09-30),我的预期输出应该是 NULL,因为它们属于过去 10 年,但出于某种原因,我得到了 OVER 10 YEARS AGO 的所有内容。

但是,当我使用 10 多年前的实际值(例如 2010-07-17)进行测试时,我也得到了预期的 OVER 10 YEARS AGO

如何才能实现我想要做的事情?我的代码似乎有什么问题?

【问题讨论】:

    标签: sql date intervals presto


    【解决方案1】:
    WITH cte (my_date) AS (
              SELECT current_date - INTERVAL '11' YEAR UNION
              SELECT '2010-07-17' UNION
              SELECT '2019-09-30'
         )
    SELECT CASE
              WHEN CAST(my_date AS DATE) + INTERVAL '10' YEAR < CURRENT_DATE
              THEN 'OVER 10 YEARS AGO'
              ELSE NULL
            END AS date_check
     FROM cte
    ;
    

    话虽如此,最好根据文字而不是您的列执行计算:

    WITH cte (my_date) AS (
              SELECT current_date - INTERVAL '11' YEAR UNION
              SELECT '2010-07-17' UNION
              SELECT '2019-09-30'
         )
    SELECT CASE
              WHEN CAST(my_date AS DATE) < CURRENT_DATE - INTERVAL '10' YEAR
              THEN 'OVER 10 YEARS AGO'
              ELSE NULL
            END AS date_check
     FROM cte
    ;
    

    如果可能,请使用不带 CAST 的正确类型。

    Full test case

    【讨论】:

    • 谢谢!如果我使用文字而不是我的列值,原来我的原始代码实际上也可以工作
    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2016-03-05
    • 2019-02-09
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多