CREATE OR REPLACE FUNCTION strday (v_str VARCHAR2, v_del VARCHAR2 DEFAULT '-') RETURN varchar2 IS v_strday VARCHAR(50); BEGIN SELECT SUBSTR(v_str,1,4)||v_del||SUBSTR(v_str,5,2)||v_del||SUBSTR(v_str,7,2) INTO v_strday FROM dual; RETURN v_strday; END;
20170917 을 매개변수로 넘겼을시에 2017-09-17로 표현해주는 함수를 짜려고 하는데요
자릿수가 8자리 이하면 들어온 값 그대로 출력하고 싶습니다.
201709만 입력시 201709로 출력..
begin 이후에 if문으로 제어하면 되나요?
if length(strday)<8 then v_strday :=v_str
이런식으로 작성했는데 아니라고 떠서
어찌 짜야하는지 감이 안오네요...도움부탁드립니다~!!
CREATE OR REPLACE FUNCTION estrday (v_str VARCHAR2, v_del VARCHAR2 DEFAULT '-') RETURN varchar2 IS v_strday VARCHAR(50); BEGIN IF LENGTH(v_str)<8 THEN RETURN v_str; END IF; SELECT SUBSTR(v_str,1,4)||v_del||SUBSTR(v_str,5,2)||v_del||SUBSTR(v_str,7,2) INTO v_strday FROM dual; RETURN v_strday; END;
이렇게 하시면 되긴하는데..
되도록 function을 쓰시지 마시고
쿼리에서 해결하세요. 결과 row가 많을 경우 function이 많을 수록 성능이 안 좋아집니다.