Oracle连接两个int列,使它们为date,并从中选择一个日期



我有列REF_YEAR和列REF_MONTH。都是int列。我想在这两个范围之间选择一个日期范围。

例如

select *
from table
where date between '05/2020' and '12/2021'

我可以做类似的事情,但与int列类似的结果吗?

如果我没理解错的话,你会

select *
from your_table
where to_date(ref_year || lpad(ref_month, 2, '0'), 'yyyymm') 
between date '2020-05-01' and date '2021-12-01'

。你必须"转换"一下。(to_date)ref_yearref_month连接(左填充0至2个字符的长度,因为May 2021不是20215而是202105),使用适当的格式掩码(yyyymm)并将其与有效的日期值进行比较,例如我使用的日期字面值。

这里应该使用一个单独的日期列,而不是单独的月份和年份列。话虽如此,整数月份和年份列仍然是可行的。使用您的示例:

SELECT *
FROM yourTable
WHERE REF_YEAR = 2020 AND REF_MONTH >= 5 OR REF_YEAR = 2021;

请注意,上述逻辑将包括整个2021日历年,包括整个12月。我猜这就是你想要的;如果你想要排除12月,我们将不得不稍微改变一下逻辑。话虽如此,维护单个日期列REF_DATE:

要好得多。
SELECT *
FROM yourTable
WHERE REF_DATE >= date '2020-05-01' AND REF_DATE < date '2022-01-01''

最新更新