[Oracle] 使用 SQL 產生假資料 1~10,在改成產生一年份的日期資料

  • 1557
  • 0
  • 2018-01-12

產生 1 到 10 的假資料

    SELECT ROWNUM

      FROM DUAL

CONNECT BY ROWNUM <= 10;

或者

    SELECT ROWNUM

      FROM DUAL

CONNECT BY LEVEL <= 10;

CONNECT BY LEVEL 是產生階層的資料,以字面上來看 CONNECT BY ROWNUM 產生連續數字的含意比較直覺。

 

透過 TO_DATE( 123, 'DDD') 可以知道當前這一年的第123天的日期是什麼,

假設要產生2016年,一年份的資料,可以這樣寫

    SELECT TO_DATE ('2016' || LPAD (ROWNUM, 3, '0'), 'YYYYDDD') FAKE_DATE

      FROM DUAL

CONNECT BY ROWNUM <= (SELECT DATE '2016-12-31' - DATE '2016-01-01' + 1

                        FROM DUAL)

DATE '2016-12-31' - DATE '2016-01-01' 是日期相減,會得到差異的天數,額外+1是相減少1 ( 例如 3/2 - 3/1 只會回傳 1,實際是2天),

在透過 TO_DATE 的 YYYY 指定年份,搭配從1產生連續數字的 ROWNUM,2016年的日期資料就全部產生。