Oracle SQL在具有日期范围的表中插入多行
我找到了一个相关问题的以下答案Oracle SQL在具有日期范围的表中插入多行,sql,oracle,calendar,Sql,Oracle,Calendar,我找到了一个相关问题的以下答案 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
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语句中,以便将“选择所有行”中的列插入到另一个表中。如果要插入数据的表已经存在,请使用“插入到”: 编辑-实际上注释完全正确-没有考虑Oracle:-以下是在Oracle中从SQL语句创建表的正确方法: 伪列级别也将起作用
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
尝试更改这些日期值以获取所需范围内的日期值-1 SELECT INTO is PL/SQL语法,而不是插入到表中。是的,如果要使用SELECT中的数据创建新表,请使用create table as SELECT。。。。在Oracle中,select into用于用select中的值填充plsql变量,不能用于创建新表。@JeffreyKemp-你完全正确-没有考虑TSQL vs plsql-编辑了我上面的答案以显示在Oracle中的正确用法。再次感谢。
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
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)
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
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;