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