문자열: 'AB^CDE^FGH^^IJK'
SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 1);
결과: AB
SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 2);
결과: CDE
SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 3);
결과: FGH
SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 4);
결과: 공백
SELECT [dbo].[FN_SPLIT]('AB^CDE^FGH^^IJK', '^', 5);
결과: IJK
-- 함수 FN_SPLIT 생성
CREATE FUNCTION [dbo].[FN_SPLIT]
(
@STRING VARCHAR(MAX ) -- 문자열
,@DELI VARCHAR (10) -- 구분자
,@POSITION INT -- 위치
)
RETURNS VARCHAR (200)
AS
BEGIN
DECLARE
@START SMALLINT
,@END SMALLINT
,@COUNTER SMALLINT
,@DELISIZE SMALLINT
,@RET VARCHAR(200 )
SELECT @DELISIZE = LEN (@DELI)
IF RIGHT(@STRING, @DELISIZE )!=@DELI
BEGIN
SET @STRING =@STRING+ @DELI
END
SET @STRING =@DELI+ @STRING
SET @START = 1
SELECT @END = CHARINDEX (@DELI ,@STRING , @START+@DELISIZE )
SET @COUNTER = 0
WHILE ( 1=1 )
BEGIN
SET @START = CHARINDEX (@DELI ,@STRING )
SELECT @END = CHARINDEX (@DELI ,@STRING , @START+@DELISIZE )
IF @END <= 0 BREAK
SET @RET = SUBSTRING(@STRING ,@START+ @DELISIZE ,@END-@START -@DELISIZE)
SELECT @STRING = STUFF (@STRING, @START,@DELISIZE ,'')
SET @COUNTER = @COUNTER + 1
IF( @COUNTER = @POSITION )
BREAK;
END
RETURN @RET
END
'MSSQL' 카테고리의 다른 글
[MSSQL] 날짜 / 시간 변환 CONVERT / DATEADD / DATEDIFF (0) | 2016.07.04 |
---|---|
[MSSQL] 기본 포트 1433 변경하기 (0) | 2016.07.04 |
[MSSQL] 현재 접속중인 세션정보 / 아이피 확인방법 (0) | 2016.07.03 |
[MSSQL] 데드락 (교착상태) Dead Lock (0) | 2016.07.03 |
[MSSQL] 컬럼명(필드명)에 특정 문자열 포함하는 테이블 찾기 (0) | 2016.07.03 |