我正在尝试在Oracle SQL中连接两个表。一个表具有DATE数据类型,其表示日期(转换图),另一个表具有表示月份的NUMBER数据类型。我需要在DATE的月份和NUMBER加入表格。我尝试过TO_CHAR(),但它没有用。有什么建议?
答案 0 :(得分:0)
Oracle的EXTRACT()函数可以做到这一点(https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm)。假设我们有2个表,填充了测试数据,如下所示:
create table numbers_ (num_ number);
create table dates_ (date_ date);
begin
for i in 1 .. 12
loop
insert into numbers_ values (i);
end loop;
insert into dates_ values ('15-JUL-2017');
insert into dates_ values ('16-AUG-2017');
insert into dates_ values ('17-SEP-2017');
end;
/
我们可以使用EXTRACT来获得"月"来自dates_ table:
select extract (month from date_) from dates_;
EXTRACT(MONTHFROMDATE_)
7
8
9
使用"提取"加入表格的几个月:
select *
from
numbers_ N,
( select extract( month from date_ ) month from dates_ ) D
where N.num_ = D.month;
-- output
NUM_ MONTH
7 7
8 8
9 9
如果您需要来自dates_表的更多列,请将它们添加到子查询(以及主SELECT子句)中。例如:
select
N.num_
, D.date_
, D.month
from
numbers_ N,
( select
extract( month from date_ ) month
, date_
from dates_ ) D
where N.num_ = D.month;
(另见:dbfiddle)
或者 - 更好(正如@Wernfried Domscheit建议的那样):
select
N.num_
, D.date_
from
numbers_ N join dates_ D
on extract(month from D.date_) = N.num_ ;