如何选择特定日期是不是早于 X 年? - 快速 SQL
Posted
技术标签:
【中文标题】如何选择特定日期是不是早于 X 年? - 快速 SQL【英文标题】: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
。
如何才能实现我想要做的事情?我的代码似乎有什么问题?
【问题讨论】:
【参考方案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
【讨论】:
谢谢!如果我使用文字而不是我的列值,原来我的原始代码实际上也可以工作以上是关于如何选择特定日期是不是早于 X 年? - 快速 SQL的主要内容,如果未能解决你的问题,请参考以下文章