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ステートメントにラップする方法を教えてもらえますか?

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 に答える