PL/SQL 西暦和暦変換 for Oracle10g
YYYYMMDD形式の日付をWYY.MM.DDに変換する関数。とりあえず書いたので貼っとく。CASE文はOracle9i以降対応らしいので注意。
ソース
CREATE OR REPLACE FUNCTION yyyy_to_wyy ( pDate IN NUMBER ) RETURN VARCHAR2 IS cYear VARCHAR2(4); cMonth VARCHAR2(2); cDay VARCHAR2(2); BEGIN cYear := SUBSTR(TO_CHAR(pDate),1,4); cMonth := SUBSTR(TO_CHAR(pDate),5,2); cDay := SUBSTR(TO_CHAR(pDate),7,2); CASE WHEN pDate - 19890107 > 0 THEN RETURN 'H' || TO_CHAR(TO_NUMBER(cYear) + 1 - 1989) || '.' || cMonth || '.' || cDay; WHEN pDate - 19261224 > 0 THEN RETURN 'S' || TO_CHAR(TO_NUMBER(cYear) + 1 - 1926) || '.' || cMonth || '.' || cDay; WHEN pDate - 19120729 > 0 THEN RETURN 'T' || TO_CHAR(TO_NUMBER(cYear) + 1 - 1912) || '.' || cMonth || '.' || cDay; ELSE RETURN 'M' || TO_CHAR(TO_NUMBER(cYear) + 1 - 1868) || '.' || cMonth || '.' || cDay; END CASE; END;
使い方
SELECT YYYY_TO_WYY(20070829) FROM DUAL
→"H19.8.29"