sql - 将年份分配给过去 6 个月的月份
问题描述
从下面的数据中,我如何在 DS_YEAR 列中分配年份,其中年份不是基于 DS_MONTH 分配的。
DS_MONTH| DS_DAY| DS_YEAR
--------|---------|--------
Mar | 2 | 2019
Jan | 4 | 2020
Apr | 2 | 07:43
Sep | 1 | 06:00
Jul | 2 | 05:00
Dec | 4 | 2019
Feb | 7 | 2020
Nov | 9 | 2019
从以上数据来看;从现在到过去 6 个月之间的任何数据都有 TIME 而不是 YEAR。但是我想写一个查询来附加相应的年份而不是时间。
我有以下查询,它将附加当前年份,但是如果我们的数据将位于上一年的过渡月份,它将不准确。
SELECT
DS_MONTH || '-' || DS_DAY || '-' ||
CASE
WHEN DS_YEAR LIKE '%:%' THEN TO_CHAR(sysdate, 'YYYY')
ELSE DS_YEAR
END dsf
FROM
MY_TABLE
我如何检查月份是在今年还是上一年,以便我可以分配正确的年份?
示例:如果今天是 2 月。在我的数据中,
Sep | 1 | 06:00
我的查询应该返回Sep-1-2019
,如果今天是 10 月,它应该返回Sep-1-2020
解决方案
这是你想要的吗 ?
WITH sampledata (mon, d, yt) AS
(
SELECT 'Mar','2','2019' FROM DUAL UNION
SELECT 'Jan','4','2020' FROM DUAL UNION
SELECT 'Apr','2','07:43' FROM DUAL UNION
SELECT 'Sep','1','06:00' FROM DUAL UNION
SELECT 'Jul','2','05:00' FROM DUAL UNION
SELECT 'Dec','4','2019' FROM DUAL UNION
SELECT 'Feb','7','2020' FROM DUAL UNION
SELECT 'Nov','9','2019' FROM DUAL
),rundate (dt) AS
(
SELECT DATE'2021-05-30' FROM DUAL
)
SELECT s.mon, s.d, s.yt,
CASE WHEN TO_DATE(s.mon||'-'||s.d||'-'|| extract(year from r.dt),'Mon-dd-YYYY') > r.dt THEN TO_DATE(s.mon||'-'||s.d||'-'|| extract(year from ADD_MONTHS(r.dt,-12)),'Mon-dd-YYYY')
ELSE TO_DATE(s.mon||'-'||s.d||'-'|| extract(year from r.dt),'Mon-dd-YYYY')
END
FROM sampledata s CROSS JOIN rundate r
WHERE INSTR(s.yt,':') > 0
UNION
SELECT s.mon, s.d, s.yt, TO_DATE(s.mon||'-'||s.d||'-'|| s.yt,'Mon-dd-YYYY')
FROM sampledata s
WHERE INSTR(s.yt,':') = 0;
更新:添加了“运行日期”CTE,因此您可以使用任何日期进行测试,而不仅仅是 sysdate。还添加了 case 表达式来检查确保日期是过去的。
推荐阅读
- javascript - 如何向 NodeJS Express 网站添加验证码?
- javascript - 尝试根据 URL 参数将 jpg 加载到页面上
- python - Jupyter 缺少版本元数据
- jsonschema - 允许任何字符串用于属性定义 Json Schema
- sql - SQL脚本从每个数据库的同一个表中选择信息?
- python - 更长的等待时间。直到在 python selenium 中超时
- django - 你能解释一下这个简单的 django 函数发生了什么吗?formset=OrderFormSet(request.POST,instance=customer)
- latex - 如何在乳胶中自动断线?
- spring-batch - 如何为 Spring Batch 项目中的每个步骤创建自定义 ItemReader
- android - Xamarin ExifInterface.SaveAttributes 覆盖没有图像数据的图像