요즘 오라클 버전을 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
---------------------------------------------------------------------------------------------------------