如何选择特定日期是否在X年之前?-Presto SQL



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

我正在尝试的代码:

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

怎样才能实现我想要做的事情?我的代码似乎出了什么问题?

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

完整测试用例

最新更新