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 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1262
1546 SSIS - 웹서비스 작업 - 웹 정보를 가져오자 jevida(강성욱) 2013.09.24 7980
1545 SSIS - 메시지 큐 - MSMQ를 이용한 비동기 전송 jevida(강성욱) 2013.09.24 10946
1544 SSIS - 메일 보내기 - 데이터 처리 결과를 메일로 전송 하자! jevida(강성욱) 2013.09.24 10463
1543 SSIS - 대량 삽입 작업 - BULK INSERT ? jevida(강성욱) 2013.09.24 10893
1542 SSIS - 이벤트 처리 및 오류 출력 - 다양한 이벤트로 오류를 출력하자 jevida(강성욱) 2013.09.24 8898
1541 SSIS - 데이터 흐름 경로 jevida(강성욱) 2013.09.24 8674
1540 VS2012 에서 CLR 프로젝트 작업 시 SSDT 오류 날 경우 쓸만한게없네(윤선식) 2013.08.21 5475
1539 SQL2014 Buffer Pool Extension 열이 2013.07.01 6078
1538 SQL Server 2014 CTP1 In-Memory OLTP 샘플 및 스샷 [1] 열이 2013.06.27 6304
1537 SQL Server 2014 CTP1 간단 설치 리뷰... [1] 이지만 2013.06.26 4884
1536 SQL Server 2014 Key Note. [2] 쓸만한게없네(윤선식) 2013.06.10 6600
1535 SQL Server Language Code [3] 쓸만한게없네(윤선식) 2013.05.06 7283
1534 sp_depends를 믿을 수 없다? [3] 차주언 2013.05.03 6812
1533 SSIS - 검사점 jevida(강성욱) 2013.04.19 8373
1532 SSIS - 패키지 구성 [1] jevida(강성욱) 2013.04.19 10153
1531 SSIS - 프로세스 실행 태스크 [2] jevida(강성욱) 2013.04.19 10388
1530 SSIS - 변수 – 다양한 사용자 변수를 만들어 보자 [3] jevida(강성욱) 2013.04.19 10863
1529 SQL Server Version별 Sample Database Download 경로 [2] 쓸만한게없네(윤선식) 2013.04.17 6841
1528 InstrCount함수와 InstrCountRev함수를 한번 만들어봤습니다. [5] Light 2013.03.27 6119
» 구분자에 의해 구분되어 반환되는 split함수가 없어서 한번 만들어 봤습니다. [2] Light 2013.03.27 7575





XE Login