结合保存在 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' ))

Here is a demo

正如 MT0 所说,它不适用于闰年...因此您可以使用 case when then end 子句并使用 mod(year, 4) 检查是否是闰年。在此演示中,我创建了一个 2020 年的情况,准确地说是 2020 年 2 月 29 日。您可以在其中看到我的建议:

DEMO2

将值转换为字符串并连接,然后使用 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