Oracle 连接两个 int 列,使它们成为日期并 select 来自它们的日期

Oracle concatenate two int columns, make them date and select a date from them

我有 REF_YEAR 列和 REF_MONTH 列。两者都是 int 列。 我想 select 这两个范围之间的日期范围。

例如

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

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

您应该在此处使用一个正确的日期列,而不是单独的月份和年份列。也就是说,整数月份和年份列仍然可行。使用您的示例:

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''

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

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 连接(左填充零最多 2 个字符,因为 2021 年 5 月不是 20215 而是 202105),使用适当的格式掩码 (yyyymm) 并将其与有效日期值进行比较,例如我使用的日期文字。