函數定義
CREATE FUNCTION ts_fmt(TS TIMESTAMP, fmt VARCHAR(20))
RETURNS VARCHAR(50)
RETURN
WITH tmp(dd,mm,yyyy,hh,mi,ss,nnnnnn) AS (
SELECT
SUBSTR(DIGITS(DAY(TS)),9),
SUBSTR(DIGITS(MONTH(TS)),9),
RTRIM(CHAR(YEAR(TS))),
SUBSTR(DIGITS(HOUR(TS)),9),
SUBSTR(DIGITS(MINUTE(TS)),9),
SUBSTR(DIGITS(SECOND(TS)),9),
RTRIM(CHAR(MICROSECOND(TS)))
FROM SYSIBM.SYSDUMMY1
)
SELECT CASE fmt
WHEN 'yyyymmdd' THEN yyyy || mm || dd
WHEN 'mm/dd/yyyy' THEN mm || '/' || dd || '/' || yyyy
WHEN 'yyyy/dd/mm hh:mi:ss' THEN yyyy || '/' || mm || '/' || dd || ' ' || hh || ':' || mi || ':' || ss
WHEN 'nnnnnn' THEN nnnnnn
ELSE 'date format ' || COALESCE(fmt,'') || ' not recognized.'
END
FROM tmp;
設計亮點
- 使用 CTE (Common Table Expression) 一次性擷取所有元件。
- CASE 表達式靈活擴充格式,新增格式只需加 WHEN 子句。
- 輸入格式不支援時回傳友善錯誤訊息。