Requirement
This blog is intended to show how we can fill the dates if dates are saved in two columns as StartDate or EndDate ( Refer Sample Data of Date Rang Table Screenshot).
We have one Transaction table which is having data for each day (Example: PGI_DATE).


FUNCTION "XX_YY"."XX.YY::TF_IBP_DATE_PERIOD_RANGE" ( )
RETURNS TABLE (PERIODSTART DATE, PERIODEND DATE, PERIODID VARCHAR (5), DAY_DATE DATE)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER AS
BEGIN
/*****************************
Write your function logic
******************************/
DECLARE v_StartDT DATE;
DECLARE v_EndDT DATE;
DECLARE v_PeriodID VARCHAR (5);
DECLARE v_FinalResult TABLE (PERIODSTART DATE, PERIODEND DATE, PERIODID VARCHAR (5), DAY_DATE DATE);
-- Declare Cursor to Fetch Records from Date Range Table
DECLARE CURSOR c_Date FOR SELECT PERIODSTART,PERIODEND,PERIODID FROM XX_YY.AP_IBP_CT_PERIOD_ID;
-- Read Cursor Row One by One.
FOR cur_row as c_Date DO
-- Select PERIODSTART & PERIODEND From Date Range Table which coming in Each Cursor Row
SELECT PERIODSTART, PERIODEND, PERIODID INTO v_StartDT, v_EndDT, v_PeriodID FROM XX_YY.AP_IBP_CT_PERIOD_ID WHERE PERIODID = cur_row.PERIODID;
-- Select Date from Time Dimension Table by Adding Filter on DATE_SQL Column
v_TblOut = SELECT v_StartDT AS "PERIODSTART", v_EndDT AS "PERIODEND", v_PeriodID AS "PERIODID", DATE_SQL AS "DAY_DATE" FROM _SYS_BI.M_TIME_DIMENSION WHERE DATE_SQL >= v_StartDT AND DATE_SQL <= v_EndDT;
-- Insert Output Into Table Variable
INSERT INTO :v_FinalResult SELECT PERIODSTART, PERIODEND, PERIODID, DAY_DATE FROM :v_TblOut;
END FOR;
-- Return Final Result From Table Variable (:v_FinalResult) as Output
RETURN SELECT PERIODSTART, PERIODEND, PERIODID, DAY_DATE FROM :v_FinalResult;
END;-- Use this Code In Table Function
SELECT AA."PERIODSTART",AA."PERIODEND",AA."PERIODID",TT.DATE_SQL AS "DAY_DATE"
FROM XX.DATE_RANGE_TABLE AA
INNER JOIN _SYS_BI.M_TIME_DIMENSION TT
ON (TT.DATE_SQL >= AA."PERIODSTART" AND TT.DATE_SQL <= AA."PERIODEND")
ORDER BY TT.DATE_SQL;You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
| User | Count |
|---|---|
| 27 | |
| 24 | |
| 13 | |
| 12 | |
| 12 | |
| 11 | |
| 10 | |
| 10 | |
| 9 | |
| 9 |