【问题标题】:How to insert a Calender Items into Oracle DB records? [duplicate]如何将日历项插入 Oracle 数据库记录? [复制]
【发布时间】:2019-10-16 09:10:42
【问题描述】:

我正在尝试将全年日历插入 ORACLE DB 记录 我的列是

----------------------------------------------------------------
| [FULL_DATE] | [DAY] | [MONTH_NAME] | [MONTH_NUMBER] | [YEAR] |
----------------------------------------------------------------
Function 
(
 @DATEFROM AS DATE
 @DATETO AS DATE 
) RETURNS DATE
AS 
BEGIN 
set @datefrom = '01/01/1995' 
set @dateto = '31/12/1996' 
while(@datefrom < @dateto) 
BEGIN set @datefrom = DATEADD(day , 1 , @datefrom) 
insert into SHEMA.DIM_TIME_TABLE ( FULL_DATE , DAY , MONTH , YEAR ) select DAY(GETDATE(@datefrom)) , DATENAME(MONTH , @datefrom), MONTH(GETDATE(@datefrom)) , YEAR(GETDATE(@datefrom))
END 
RETURN
END

预期:

---------------------------------------------------------------
 01 / 01 /1995 | 01 | JAN  | 01 | 1995
---------------------------------------------------------------
 02 / 01 /1995 | 02 | JAN  | 01 | 1995  
---------------------------------------------------------------
 03 / 01 /1996 | 03 | JAN  | 01 | 1995

【问题讨论】:

    标签: sql oracle sql-insert recursive-query date-arithmetic


    【解决方案1】:

    在Oracle中,可以使用递归查询来生成日期序列,然后在外层查询中生成期望的列:

    create table dim_time_table as
    select 
        dt full_date,
        extract(day from dt) day,
        to_char(dt, 'month') month_name,
        extract(month from dt) month_number,
        extract(year from dt) year
    from (
        select to_date('1995-01-01', 'yyyy-mm-dd') + level - 1 as dt 
        from dual 
        connect by 
            to_date('1995-01-01', 'yyyy-mm-dd') + level 
            <= to_date('1997-01-01', 'yyyy-mm-dd')
    )
    

    Demo on DB Fiddle

    完整日期 |天 | MONTH_NAME | MONTH_NUMBER |年 :-------- | --: | :--------- | ------------: | ---: 95 年 1 月 1 日 | 1 |一月 | 1 | 1995 95 年 1 月 2 日 | 2 |一月 | 1 | 1995 95 年 1 月 3 日 | 3 |一月 | 1 | 1995 95 年 1 月 4 日 | 4 |一月 | 1 | 1995 95 年 1 月 5 日 | 5 |一月 | 1 | 1995 95 年 1 月 6 日 | 6 |一月 | 1 | 1995 95 年 1 月 7 日 | 7 |一月 | 1 | 1995 ...

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多