JOIN表ON DATE = NUM​​BER?

时间:2017-07-14 22:11:50

标签: sql oracle join numbers

我正在尝试在Oracle SQL中连接两个表。一个表具有DATE数据类型,其表示日期(转换图),另一个表具有表示月份的NUMBER数据类型。我需要在DATE的月份和NUMBER加入表格。我尝试过TO_CHAR(),但它没有用。有什么建议?

1 个答案:

答案 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_ ;