요즘 오라클 버전을 MS-SQL 버전으로 변경하는 작업을 하고 있습니다.

오라클 버전에서는 다양한 함수를 편안하게 사용하고 있었는데,

이걸 MS-SQL로 변경하려니 MS-SQL에서는 제공되는 기본함수가 많지 않아서 불편하더라구요.


그중에 오라클의 "REGEXP_SUBSTR"도 MS-SQL에서는 없습니다.


열심히 인터넷을 뒤져보아도 찾을 수 없었습니다.

그래서, 긁어다 쓸 수 있도록 MS-SQL용 사용자 정의 "REGEXP_SUBSTR" 함수를 작성해서 올려놓습니다.


마음껏 가져다 쓰세요.


(1) 사용법


- 에서  -> DBO.REGEXP_SUBSTR(STR, ';',1,2) 


 DBMS

 REGEXP_SUBSTR 함수 사용 예

 결과

오라클

 REGEXP_SUBSTR('AAA;BBB;CCC;DDD', '[^;]+',1,2)

 BBB

 MS-SQL

 DBO.REGEXP_SUBSTR('AAA;BBB;CCC;DDD', ';',1,2)

 BBB


(2) MS-SQL에서 USER DEFINED 함수 : REGEXP_SUBSTR

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

/*

 * 오라클의 기본 함수인 REGEXP_SUBSTR의 MS-SQL용 USER DEFINED FUNCTION

 */


CREATE  FUNCTION [dbo].[REGEXP_SUBSTR] 

        (

@i_str varchar(1000), 

@i_delimeter varchar(10), 

@i_position int,

@i_index int

) RETURNS varchar(2000)


AS BEGIN

DECLARE @o_str varchar(2000); 

SET @o_str = '';


WITH t 

AS (

SELECT 1 as lvl,

  CONVERT(VARCHAR(2000), @i_str) AS code

UNION ALL

SELECT lvl + 1 as lvl,

                                 CONVERT(VARCHAR(2000), 

                                              SUBSTRING(code, CHARINDEX(@i_delimeter, code, 1) + 1, 99)

                                              ) AS code

                         FROM t

        WHERE CHARINDEX(@i_delimeter, code, 1) > 0

     )

SELECT @o_str = CONVERT(VARCHAR(2000), 

                                                     LEFT(code, 

                                                            CHARINDEX(@i_delimeter, code + @i_delimeter, 1) - 1)) 

         FROM t

WHERE lvl = @i_index

 

return @o_str

END

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

Posted by 우라질레이터

urajilation@gmail.com
우라질레이터

달력

태그목록