본문 바로가기
MES 문의 : 010-8015-0400
IT개발/데이터베이스(DB)

MSSQL, 단어 사이에 세미콜론 넣기 '123' -> '1;2;3;'

by all it 2024. 11. 12.
반응형

MSSQL에서 문자열 '123'을 각각의 문자 뒤에 세미콜론을 추가해 '1;2;3;' 형식으로 변환하려면 다음과 같이 사용할 수 있다.

  1. FOR XML PATH를 이용한 방법:
DECLARE @input VARCHAR(10) = '123';
DECLARE @output VARCHAR(MAX);

SET @output = STUFF((
    SELECT ';' + SUBSTRING(@input, Number, 1)
    FROM master..spt_values
    WHERE Type = 'P'
    AND Number BETWEEN 1 AND LEN(@input)
    FOR XML PATH('')), 1, 1, '') + ';';

SELECT @output AS Result;

이 쿼리의 결과는 '1;2;3;'가 된다.

설명:

  • master..spt_values는 SQL Server의 시스템 테이블로 숫자 시퀀스를 생성하는 데 사용할 수 있다.
  • FOR XML PATH('')는 행을 하나의 문자열로 결합하는 역할을 한다.
  • STUFF() 함수는 결과 문자열에서 처음의 불필요한 세미콜론을 제거하고 마지막에 ;를 추가하는 데 사용된다.

이 방법을 사용하면 간단하게 문자열을 원하는 형식으로 변환할 수 있다.

다른 방법으로 문자열 '123'을 '1;2;3;' 형태로 변환하는 방법은 재귀적인 CTE(Common Table Expression)와 STRING_AGG 함수를 사용하는 방법이 있다. 다음은 이를 활용한 예시이다.

WITH cte AS (
    SELECT 1 AS Position, SUBSTRING('123', 1, 1) AS CharacterValue
    UNION ALL
    SELECT Position + 1, SUBSTRING('123', Position + 1, 1)
    FROM cte
    WHERE Position < LEN('123')
)
SELECT STRING_AGG(CharacterValue, ';') + ';' AS Result
FROM cte;

이 쿼리의 결과는 '1;2;3;'가 된다.

설명:

  1. WITH cte AS (...)는 CTE를 정의한다.
    • CTE는 재귀적으로 실행되어 문자열 '123'의 각 문자와 그 위치를 추출한다.
  2. STRING_AGG(CharacterValue, ';')는 CTE의 각 문자 값을 세미콜론으로 결합하여 최종 결과 문자열을 생성한다.
  3. 마지막으로 + ';'를 사용하여 문자열 끝에 세미콜론을 추가한다.

이 방법을 사용하면 보다 복잡한 문자열 처리에서도 쉽게 원하는 결과를 얻을 수 있다.

반응형

댓글