저는 DB2를 사용하고 있습니다.

Oracle의 split 함수가 DB2에는 없다고 해서,

인터넷을 뒤지다가 내가 필요한 딱 들어맞는 split 함수가 없어서,

DB2에서 사용할 spilt 할수를 만들었습니다.

 

여기 저기 뒤지고 다니기 귀찮으신 분들 이거 가져다 쓰세요.

내가 내가 필요한 기능에 맞춰 작성한 거니까 맞껏 퍼쓰셔도 됩니다.

 

이 Function에 잘못된 부분이 발견될 수 있습니다.

또 각 프로젝트에 필요한 요건에 딱 들어맞지 않을 수도 있습니다.

그건 알아서 수정해서 사용하세요.

 

 

1. Function 생성 스크립트

-- 작성일 :  2012/05/14
-- 작성자 : 황상규 (urajilation@gmail.com)
-- 내  용 : 특정 문자열에서 임의로 정의한 Delimeter로 구분하여, 몇번째 문자열있는 문자열을 반환한다.
-- 용도 : 특정문자열을 구분자(Delimeter)로 가진 문자열에서 특정 순서에 있는 문자열을 구하는 용도
-- 구현환경 : IBM DB2          

-----------------------------------------------------------------------------------------------
CREATE FUNCTION SPLIT_DELIMETER(pos INT, delimeter VARCHAR(10), string VARCHAR(4000))
LANGUAGE SQL
RETURNS VARCHAR(2000)
DETERMINISTIC NO EXTERNAL ACTION
BEGIN ATOMIC
    DECLARE x INT;
    DECLARE s INT; -- split한 결과 String의 시작 위치
    DECLARE e INT; -- split한 결과 String의 끝 위치
    DECLARE d INT; -- delimeter String의 길이   
    DECLARE tempString VARCHAR(4200); -- delimeter String의 길이

    SET x = 0;
    SET s = 0;
    SET e = 0;
    SET d = LENGTH(delimeter);
   
    -- 검색할 string의 앞뒤에 delimeter를 연결한다.
    -- 원 Data의 앞뒤에 delimeter가 없다면 이 부분은 제거한다.   
    SET tempString = delimeter || string || delimeter;
       
    WHILE (x < pos) DO
        SET s = locate(delimeter, tempString, s + 1);
        IF s = 0 THEN
            RETURN NULL;
        END IF;
        SET x = x + 1;
    END WHILE;

    SET e = locate(delimeter, tempString, s + 1);
    IF s >= e THEN
        SET e = LENGTH(tempString) + 1;
    END IF;
   
    RETURN SUBSTR(tempString, s + d, e - s - d);
END

-----------------------------------------------------------------------------------------------

 

2. 사용법
-- 샘플 데이타 : "유준상-@-김남주-@-강부자-@-김태희"
-- 두번째 이름 : "김남주"
-- 샘플 실행 SQL

-----------------------------------------------------------------------------------------------
SELECT 
 SPLIT_DELIMETER(2,'-@-','유준상-@-김남주-@-강부자-@-김태희') AS NAME
  FROM TABLE_EXAMPLE

-----------------------------------------------------------------------------------------------


 

Posted by 우라질레이터

urajilation@gmail.com
우라질레이터

달력

태그목록