0

我找到了一个相关问题的以下答案。

with calendar as(
    select :startdate + rownum - 1 as day
    from dual
    connect by rownum < :enddate - startdate
)
select rownum as "S.No", to_date(day,'dd_mm_yyyy') as "Cal_Dt", to_char(day,'day') as "DayName"
from calendar

此 SQL 为一系列日期生成许多日期和相关信息。有人可以告诉我如何将其包装到 SQL 语句中,以便可以将 select 之外的内容(所有行)插入到另一个表中。

4

3 回答 3

1

伪列LEVEL也可以工作

insert into tgt_tbl(id,dt,dy)
select distinct level,:startdate+level-1,to_char(:startdate+level-1,'Day') from dual
connect by level<=(:enddate-:startdate)+1
于 2013-03-18T05:07:41.773 回答
1

如果要插入数据的表已经存在,请使用INSERT INTO

with calendar as ( 
    select :startdate + rownum - 1 as day 
    from dual 
    connect by rownum < :enddate - startdate ) 
insert into anothertable (no, dt, dayname)
select rownum as "S.No", to_date(day,'dd_mm_yyyy') as "Cal_Dt", to_char(day,'day') as "DayName" 
from calendar

或者使用SELECT INTO语法创建新表:

with calendar as ( 
    select :startdate + rownum - 1 as day 
    from dual 
    connect by rownum < :enddate - startdate ) 
select rownum as "S.No", to_date(day,'dd_mm_yyyy') as "Cal_Dt", to_char(day,'day') as "DayName" into newtable
from calendar

编辑——实际上评论是完全正确的——没有考虑 Oracle :-) 这是从 Oracle 中的 SQL 语句创建表的正确方法:

with calendar as ( 
    select :startdate + rownum - 1 as day 
    from dual 
    connect by rownum < :enddate - startdate ) 
CREATE TABLE newtable
AS 
(select rownum as "S.No", to_date(day,'dd_mm_yyyy') as "Cal_Dt", to_char(day,'day') as "DayName"
from calendar)
于 2013-03-18T01:38:20.523 回答
0
CREATE TABLE DATES_TABLE 
(
  Date_Field   DATE
);

INSERT INTO DATES_TABLE
(
  Date_Field
)
SELECT ROWNUM - 1 + TO_DATE('01-Jun-2004','dd-mon-yyyy') Date_Field
FROM all_objects
WHERE ROWNUM < TO_DATE('30-Jun-2004','dd-mon-yyyy') - TO_DATE('01-Jun-2004','dd-mon-yyyy') + 2;

尝试更改这些日期值以获取所需范围内的日期值

于 2019-02-07T11:52:46.270 回答