본문 바로가기

MSSQL

MS-SQL 구분자로 나누기

728x90
반응형

sql문에서 구분자를 통해서 정해지지 않은 갯수의 데이터를 반복해서 찾아야 하는 경우를 접하게 되었습니다.

근데 도저희 생각이 나지 않다고 SubString과 CharIndex를 통해서 쉽게 할 수 있다는것을 알게 되었죠.

그러면 그 구분자로 나누는 방법을 알아 보도록 하겠습니다.

어렵진 않으니 쉽게 따라 오실수 있을겁니다.

 

Declare @Name varchar(100)

Declare @TName varchar(10)

Set @Name = '고수/이나영/손예진/정지훈/문근영/박예진'

While charindex('/', @Name) <> 0 OR Len(rtrim(@Name)) > 0

begin

  If (charindex('/', @Name) = 0)

  Begin

    set @TName = @Name

    set @Name = ''

  End

  Else

  Begin

    select @TName = SubString(@Name, 0, charindex('/', @Name))

    Set @Name = SubString(@Name, CharIndex('/', @Name) + 1, len(@Name))

  End

  PRINT(@TName)

end


입력하시고 F5나 실행버튼을 눌러주시면 다음과 같은 결과가 출력되는 것을 볼 수 있습니다.

 

마지막 '/' 가 없는 문자열 처리 때문에 많이 지저분해 지긴 했지만 그래도 상당히 간단한 코드로 구분자 처리를 할 수 있는 것을 볼수가 있습니다 ^^

다들 잘 아셔서 부과 설명이 필요 없을꺼 같긴 하지만 혹시나 모를 일을 준비해서 간단히 설명을 하도록 하겠습니다.

while문에서는 '/' 이 있을 때와 글자수가 0보다 클때 반복하게 되어 있습니다. 마지막 문자에 '/'이 안들어 있을 수 있기 때문에 글자수 조건을 포함한 것이죠.
'/'이 없을때는 마지막 문자이므로 마지막 문자를 그냥 입력해주고 완전히 지워주는 역할을 합니다.
그리고 '/'이 있을 때는 '/' 전까지의 문자들을 @TName에 저장해주고 @TName에 저장했던 문자를 제외한 다른 문자들을 다시 @Name 에 저장해줍니다.

이런 과정을 문자들이 다 없어질때까지 반복해서 위와 같은 결과값이 출력 된 것이죠 ^^

어떠셨나요?? 어려운 작업은 아니니 쉽게 하셨을 겁니다.

틀린 부분이나 더 쉽게 처리할 수 있는 부분은 덧글로 알려주시면 감사하겠습니다 ^^

이상 엔젤루스였습니다~~

감사합니다
728x90
반응형