首页 > 解决方案 > 如何选择特定日期是否早于 X 年?- 快速 SQL

问题描述

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

我正在尝试的代码:

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

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

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

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

标签: sqldateintervalspresto

解决方案


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 的正确类型。

完整的测试用例


推荐阅读