如何选择特定日期是不是早于 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的主要内容,如果未能解决你的问题,请参考以下文章

如何选择最大日期早于某个值的行

带有手动输入和动态最小日期的 jQuery UI 日期选择器

如何选择特定日期的某些行

按较早日期验证两个日期时间本地字段?

如何检查时间戳是不是早于某个月数? [复制]

如果日期早于当前月份,则将日期转换为当前月份的第一天