从双创建日期表

问题描述

我一直试图弄清楚如何用这段代码创建一个表,但无法弄清楚。非常感谢您的回答。

WITH 
  dat_param AS (SELECT SYSDATE AS dat FROM dual)

SELECT 
  LEVEL AS day_year,Trunc((SELECT dat FROM dat_param),'YYYY')+LEVEL-1 AS date_year,TO_CHAR(Trunc((SELECT dat FROM dat_param),'YYYY')+LEVEL-1,'YYYY-MM') AS part_year,TO_NUMBER(TO_CHAR(Trunc((SELECT dat FROM dat_param),'D')) AS day_week

FROM   dual
CONNECT BY LEVEL <= ADD_MONTHS(Trunc((SELECT dat FROM dat_param),'YEAR'),12)-Trunc((SELECT dat FROM dat_param),'YEAR')

解决方法

假设您使用的是 Oracle,则可以使用 CREATE TABLE AS

CREATE TABLE t as
    WITH 
      dat_param AS (SELECT SYSDATE AS dat FROM dual)    
    SELECT 
      LEVEL AS day_year,TRUNC((SELECT dat FROM dat_param),'YYYY')+LEVEL-1 AS date_year,TO_CHAR(TRUNC((SELECT dat FROM dat_param),'YYYY')+LEVEL-1,'YYYY-MM') AS part_year,TO_NUMBER(TO_CHAR(TRUNC((SELECT dat FROM dat_param),'D')) AS day_week    
    FROM   dual
    CONNECT BY LEVEL <= ADD_MONTHS(TRUNC((SELECT dat FROM dat_param),'YEAR'),12)-TRUNC((SELECT dat FROM dat_param),'YEAR');

Here 是一个 dbfiddle。