CREATE  FUNCTION fSplit( @String   NVARCHAR(MAX), @Separator  NVARCHAR(1))

RETURNS @Rtn Table ( Num INT, Val NVARCHAR(MAX) )
AS BEGIN
 DECLARE  @Start INT = 1,    @Idx  INT = 1,    @Num INT = 0,    @Tmp NVARCHAR(MAX)

 WHILE(@Idx > 0) BEGIN


  SET @Idx = CHARINDEX(@Separator, @String, @Start)

 

  IF @Idx = 0 BEGIN
   SET @Tmp = RIGHT(@String, LEN(@String) - @Start + 1)
  END ELSE BEGIN
   SET @Tmp = SUBSTRING(@String, @Start, @Idx - @Start)
  END


  IF LEN(@Tmp) > 0 BEGIN
   INSERT INTO @Rtn
   VALUES ( @Num, @Tmp )
  END


  SET @Start = @Idx + 1
  SET @Num = @Num + 1


 END

 

 RETURN
END
GO

 

-결과 테스트

SELECT * FROM fSplit('2-1-3', '-')

 

 aresult.jpg

 

@String에 문자열을 받아서 @Separator의 구분자에 의해 구분되어 임시테이블로 반환됩니다.

n번째 데이터가 필요할 때에는  n번째 row의 데이터를 빼오면 되겠습니다.

몇번째 데이터를 꺼내올지는 함수를 간단히 만들어서 사용하셔도 됩니다.

 

처리속도는 장담못하지만... 아마 split 기능을 수행하는 쿼리중에는 코드가 가장 짧을것으로 생각됩니다.

 

아참.... mssql에서는 c#에서 ///와 같은 기능하는 명령어가 혹시 있나요?

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 3103
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 1946
1534 sp_depends를 믿을 수 없다? [3] 차주언 2013.05.03 6839
1533 SSIS - 검사점 jevida(강성욱) 2013.04.19 8376
1532 SSIS - 패키지 구성 [1] jevida(강성욱) 2013.04.19 10164
1531 SSIS - 프로세스 실행 태스크 [2] jevida(강성욱) 2013.04.19 10405
1530 SSIS - 변수 – 다양한 사용자 변수를 만들어 보자 [3] jevida(강성욱) 2013.04.19 10901
1529 SQL Server Version별 Sample Database Download 경로 [2] 쓸만한게없네(윤선식) 2013.04.17 6843
1528 InstrCount함수와 InstrCountRev함수를 한번 만들어봤습니다. [5] Light 2013.03.27 6121
» 구분자에 의해 구분되어 반환되는 split함수가 없어서 한번 만들어 봤습니다. [2] Light 2013.03.27 7584
1526 Microsoft.ACE.OLEDB.12.0 을 이용한 엑셀 2010 직접쿼리하기 [3] 열이 2013.03.20 42321
1525 Online restore [1] jevida(강성욱) 2013.03.15 6325
1524 SQL Server User Connections [1] jevida(강성욱) 2013.03.15 10663
1523 스크립트 구성 요소 – [데이터 대상] 사용 [1] jevida(강성욱) 2013.03.13 6781
1522 스크립트 구성 요소 – [데이터 변환] 사용 jevida(강성욱) 2013.03.13 6151
1521 SSIS - 스크립트 구성 요소 – [데이터 원본] 사용 jevida(강성욱) 2013.03.12 7886
1520 SSIS - 피벗 해제 변환 - 피봇된 데이터를 테이블 형태로 변환 하자! jevida(강성욱) 2013.03.12 7210
1519 SQL Server 단일 사용자 설정 시 SSMS로 로그인하기 [1] 쓸만한게없네(윤선식) 2013.02.25 12383
1518 SELECT 가 Deadlock? [2] 이스트럭(강동운) 2013.02.16 11893
1517 한글 초성 관련 [4] 건우아빠 2012.12.26 13192
1516 .NET 4.5 (VS2012) 설치 후 SSMS 에서 원격 MSSQL 2008 등이 접속 안될 경우! [2] 컴포지트 2012.12.11 17876
1515 SQL프로시저들의 매개변수를 한번에 샥 보여줍니다 [3] 차주언 2012.12.10 9287





XE Login