53 lines
1.4 KiB
SQL
53 lines
1.4 KiB
SQL
SET PATH "QSYS","QSYS2","SYSPROC","SYSIBMADM","QTEMP" ;
|
|
|
|
CREATE OR REPLACE FUNCTION CISTOOLS.CYMD2DATE (
|
|
CYMD_DATE NUMERIC(7, 0) DEFAULT 0 )
|
|
RETURNS DATE
|
|
LANGUAGE SQL
|
|
SPECIFIC CISTOOLS.CYMD2DATE
|
|
NOT DETERMINISTIC
|
|
MODIFIES SQL DATA
|
|
CALLED ON NULL INPUT
|
|
SET OPTION ALWBLK = *ALLREAD ,
|
|
ALWCPYDTA = *OPTIMIZE ,
|
|
COMMIT = *NONE ,
|
|
DBGVIEW = *SOURCE ,
|
|
DECRESULT = (31, 31, 00) ,
|
|
DFTRDBCOL = QTEMP ,
|
|
DYNDFTCOL = *NO ,
|
|
DYNUSRPRF = *USER ,
|
|
SRTSEQ = *HEX
|
|
BEGIN
|
|
DECLARE CHAR_DATE CHAR ( 8 ) ;
|
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION RETURN NULL ;
|
|
SET CHAR_DATE =
|
|
CASE
|
|
WHEN
|
|
LEFT ( LPAD ( CYMD_DATE , 7 , '0' ) , 1 ) = '0'
|
|
THEN '19' || RIGHT ( LPAD ( CYMD_DATE , 7 , '0' ) , 6 )
|
|
WHEN
|
|
LEFT ( LPAD ( CYMD_DATE , 7 , '0' ) , 2 ) >= '1'
|
|
THEN
|
|
( INT ( LEFT ( LPAD ( CYMD_DATE , 7 , '0' ) , 1 ) ) + 19 ) ||
|
|
RIGHT ( LPAD ( CYMD_DATE , 7 , '0' ) , 6 )
|
|
END ;
|
|
-- TO_DATE will validate the date and throw exception if invalid
|
|
-- Exception handler will catch and return NULL
|
|
RETURN TO_DATE ( CHAR_DATE , 'YYYYMMDD' ) ;
|
|
END ;
|
|
|
|
COMMENT ON PARAMETER SPECIFIC FUNCTION CISTOOLS.CYMD2DATE
|
|
( CYMD_DATE IS 'CYMD Date Format' ) ;
|
|
|
|
LABEL ON SPECIFIC FUNCTION CISTOOLS.CYMD2DATE
|
|
IS 'Cymd To Date' ;
|
|
|
|
GRANT ALTER , EXECUTE
|
|
ON SPECIFIC FUNCTION CISTOOLS.CYMD2DATE
|
|
TO AMAPICS WITH GRANT OPTION ;
|
|
|
|
GRANT EXECUTE
|
|
ON SPECIFIC FUNCTION CISTOOLS.CYMD2DATE
|
|
TO PUBLIC ;
|
|
|