使用sql从另一个数据库中提取日,周和月

时间:2015-01-07 16:20:29

标签: sql oracle

我有一个数据库(不是我的),我需要从中提取日期并将其放入另一个数据库(我的),并为日,周和月分别设置列。在原始数据库中,它看起来像05-APR-10,但我不能让它出现在单独的列中。

这是我到目前为止所做的:

CREATE TABLE Seasontime (
Seasontime number(2) PRIMARY KEY,
Month number(2) NOT NULL,
Week number(2) NOT NULL,
Day number(2) NOT NULL);

CREATE SEQUENCE Seasontime_Seq
START WITH  0
INCREMENT BY 1
MINVALUE 0
NOCACHE
NOCYCLE;

insert into Seasontime
    select Seasontime_seq.nextval,
           Month,
           Week,
           Day
    from   (
            select extract(Month from PDate) as Month,
                   extract(Week from PDate) as Week,
                   extract(Day from PDate) as Day
            From notmydatabase.performance
           );

最后一点不起作用,所以如果有人能帮助我那将是伟大的 提前致谢

2 个答案:

答案 0 :(得分:1)

WEEK不是the extract() function的有效字段。您需要使用to_char()来获取周数:

select Seasontime_seq.nextval,
       Month,
       Week,
       Day
from   (
        select extract(Month from PDate) as Month,
               to_number(to_char(PDate, 'WW')) as Week,
               extract(Day from PDate) as Day
        From notmydatabase.performance
       );

对于其他字段,您可能更愿意使用to_char()而不是extract()来保持一致性。您可能还需要ISO周号,您可以使用the 'IW' date format element代替'WW'

或者,如果你想要一周中的一周而不是一年中的一周,那么只需'W';但这也许表明你想要一周中的某一天,而不是extract()给你的那一天。

答案 1 :(得分:0)

您无法使用extract从日期列中获取一周。请尝试使用to_char:

insert into Seasontime
select Seasontime_seq.nextval,
       Month,
       Week,
       Day
from   (
        select to_char(PDate, 'mm') as Month,
               to_char(PDate, 'WW) as Week,
               to_char(PDate, 'dd') as Day
        From notmydatabase.performance
       );