sql - 如何选择特定日期是否早于 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
了预期的结果。
怎么可能实现我想要做的事情?我的代码似乎有什么问题?
解决方案
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 的正确类型。
推荐阅读
- angular - 如何避免使用 Visual Studio 2017 在 Angular 4 的生产模式下加载 node_modules 和 .ts 文件
- json - Cloudformation,模板验证错误:无效的模板属性或属性
- android - 用于 fastboot 和 adb 的 Windows 10 原始 USB 访问
- c# - 如何让眼睛随机眨眼?
- css - 删除材质对话框上的奇怪边框
- c - 如何使这项工作适用于 3 个用户并通过而不是 1 C
- angular - 带有参数的特定路由的用户访问
- python - 通过硒,Python中的xpath检测用户可见元素(仅在视口中)
- c# - 如何让 C# 中的按钮上显示的文本?
- reactjs - 动作类型说明