오라클 DB에 예를들어 ‘가나다’와 같이 입력된 자료를 1 부터 5까지 substrb 하고자 할 경우 ‘가나’ 만 return 하는 함수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
create or replace function sf_hansubb( v_str in varchar2, v_start in integer, v_len in integer) return varchar2 /*==================================================================* * +---------------------------------------------------------+ * * | 프로그램 ID : sf_hantrim.sql | * * +---------------------------------------------------------+ * * | 프로그램 명 : 한글 field right trim | * * +---------------------------------------------------------+ * * | 프로그램 설명 | * * +---------------------------------------------------------+ * * | 한글 자료중 KSC5601에 없는 한글자료를 rihgt trim한다 | * * | 참고자료 : KSC5601 code table | * * +---------------------------------------------------------+ * *==================================================================*/ is l_len number(4); l_ascii number; l_down number; begin if v_start = 0 then return null; end if; if v_len = 0 then return null; end if; if v_start > lengthb(v_str) then return null; end if; if v_len > (lengthb(v_str) - v_start + 1) then l_len := lengthb(v_str) - v_start + 1; else l_len := v_len; end if; if ascii(substrb(v_str,v_start + l_len - 1, 1)) = 32 then if l_len = 1 then return substrb(v_str,v_start,l_len); end if; l_ascii := ascii(substrb(v_str,v_start + l_len - 2, 2)); if l_ascii >= 45217 and l_ascii <= 51454 then l_down := mod(l_ascii,256); if l_down >= 161 and l_down <= 254 then return substrb(v_str,v_start,l_len); else return substrb(v_str,v_start,l_len - 1); end if; else return substrb(v_str,v_start,l_len - 1); end if; else return substrb(v_str,v_start,l_len); end if; end sf_hansubb ; |