如何 select 特定日期是否早于 X 年? - 急板 SQL
How to select whether or not a specific date is before X amount of years? - Presto SQL
我正在尝试 select 我的某一列中的日期值是否发生在特定年限之前。
我正在尝试的代码:
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 的正确类型。
我正在尝试 select 我的某一列中的日期值是否发生在特定年限之前。
我正在尝试的代码:
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 的正确类型。