结合保存在 Oracle 不同列中的月份和年份列
Combine with month and year column kept in different columns on Oracle
我将月份和年份信息作为数字保存在不同的列中。
我想使用这些列在 sysdate 上返回 12 个月。
下面我用的table为例,
由于我们现在是第5个月,所以我想获取到去年第6个月的数据。
版本 table :
所以作为查询的结果,
下面的结果应该 return.
首先,我想通过合并年和月列并从当前月份回溯一年作为日期进行查询。
你可以把你的年月换算成整数形式的YYYYMM比较一下:
SELECT *
FROM versiyon_table
WHERE (versiyon_table.year * 100) + versiyon_table.month > (EXTRACT(YEAR FROM SYSDATE) * 100) + EXTRACT(MONTH FROM SYSDATE)
select *
from versiyon
where lpad(year, 4, '0') || lpad(month, 2, '0') >= to_number(to_char(sysdate - 365, 'yyyymm' ))
正如 MT0 所说,它不适用于闰年...因此您可以使用 case when then end 子句并使用 mod(year, 4) 检查是否是闰年。在此演示中,我创建了一个 2020 年的情况,准确地说是 2020 年 2 月 29 日。您可以在其中看到我的建议:
将值转换为字符串并连接,然后使用 ADD_MONTHS(SYSDATE, -12)
获取去年的日期(无论是否为闰年,都会得到正确的日期):
SELECT *
FROM versiyon
WHERE TO_CHAR(year, 'fm0000') || TO_CHAR(month, 'fm00')
>= TO_CHAR(ADD_MONTHS(SYSDATE, -12), 'YYYYMM')
db<>fiddle here
我将月份和年份信息作为数字保存在不同的列中。 我想使用这些列在 sysdate 上返回 12 个月。
下面我用的table为例, 由于我们现在是第5个月,所以我想获取到去年第6个月的数据。
版本 table :
所以作为查询的结果, 下面的结果应该 return.
首先,我想通过合并年和月列并从当前月份回溯一年作为日期进行查询。
你可以把你的年月换算成整数形式的YYYYMM比较一下:
SELECT *
FROM versiyon_table
WHERE (versiyon_table.year * 100) + versiyon_table.month > (EXTRACT(YEAR FROM SYSDATE) * 100) + EXTRACT(MONTH FROM SYSDATE)
select *
from versiyon
where lpad(year, 4, '0') || lpad(month, 2, '0') >= to_number(to_char(sysdate - 365, 'yyyymm' ))
正如 MT0 所说,它不适用于闰年...因此您可以使用 case when then end 子句并使用 mod(year, 4) 检查是否是闰年。在此演示中,我创建了一个 2020 年的情况,准确地说是 2020 年 2 月 29 日。您可以在其中看到我的建议:
将值转换为字符串并连接,然后使用 ADD_MONTHS(SYSDATE, -12)
获取去年的日期(无论是否为闰年,都会得到正确的日期):
SELECT *
FROM versiyon
WHERE TO_CHAR(year, 'fm0000') || TO_CHAR(month, 'fm00')
>= TO_CHAR(ADD_MONTHS(SYSDATE, -12), 'YYYYMM')
db<>fiddle here