Oracle PL/SQL 取得某個月份的每一天日期 (某個區間的每一天日期)


若資料的日期只有 2010/12/01, 2010/12/05,

但在資料呈現上, 卻要顯示 2010/12/01, 2010/12/02, 2010/12/03, ... 2010/12/31,

在 Oracle PL/SQL 查詢語法中, 要如何實現,

範例, 如下 :
 程式碼
-- 建立測試架構
CREATE TABLE TOM1 (
TRX_DATE VARCHAR2(8)
, AMT NUMBER
);

-- 新增測試資料
INSERT INTO TOM1 VALUES( '20101201', 100 );
INSERT INTO TOM1 VALUES( '20101205', 300 );
INSERT INTO TOM1 VALUES( '20101210', 200 );
INSERT INTO TOM1 VALUES( '20101212', 600 );
INSERT INTO TOM1 VALUES( '20101220', 500 );
INSERT INTO TOM1 VALUES( '20101225', 800 );
COMMIT;

-- 查詢
SELECT ED.EVERY_DAY
, NVL(T.AMT, 0) AMT
FROM TOM1 T
, (SELECT TO_CHAR( TO_DATE('201012', 'YYYYMM') + (LEVEL-1), 'YYYYMMDD' ) EVERY_DAY
FROM DUAL
CONNECT BY LEVEL < ( LAST_DAY(TO_DATE('201012', 'YYYYMM')) - TO_DATE('201012', 'YYYYMM') + 2 )
) ED

WHERE T.TRX_DATE(+) = ED.EVERY_DAY
ORDER BY ED.EVERY_DAY

-- 查詢結果
-- 20101201 100
-- 20101202 0
-- 20101203 0
-- 20101204 0
-- 20101205 300
-- ...
-- 20101225 800
-- 20101226 0
-- 20101227 0
-- 20101228 0
-- 20101229 0
-- 20101230 0
-- 20101231 0


Related Posts Plugin for WordPress, Blogger...