SQL Server 결과 집합을 문자열로 변환
SQL Server에서 다음과 같은 결과를 얻고 있습니다.
SELECT StudentId FROM Student WHERE condition = xyz
저는 다음과 같은 출력을 받고 있습니다.
학생 ID1236 7656 8990........
저장 프로시저의 출력 파라미터는 다음과 같습니다.@studentId
string and I want the return statement as
1236, 7656, 8990.
출력을 단일 문자열로 변환하려면 어떻게 해야 합니까?
단일 열을 반환합니다.학생 ID]
테스트:
DECLARE @result NVARCHAR(MAX)
SELECT @result = STUFF(
( SELECT ',' + CONVERT(NVARCHAR(20), StudentId)
FROM Student
WHERE condition = abc
FOR xml path('')
)
, 1
, 1
, '')
DECLARE @result varchar(1000)
SELECT @result = ISNULL(@result, '') + StudentId + ',' FROM Student WHERE condition = xyz
select substring(@result, 0, len(@result) - 1) --trim extra "," at end
사용COALESCE
함수:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
두 대답 모두 유효하지만 변수 값을 초기화하는 것을 잊지 마십시오. 기본값은 NULL이고 T-SQL입니다.
NULL + "Any text" => NULL
그것은 매우 흔한 실수입니다, 잊지 마세요!
ISNULL 기능을 사용하는 것도 좋습니다.
SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student
사용CONCAT
변환 오류를 방지하는 기능:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID)
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
다음은 MySQL(SQL Server가 아님)을 위한 솔루션입니다. mysql에 대한 스택 오버플로에 대한 솔루션을 쉽게 찾을 수 없었기 때문에 누군가에게 도움이 될 수 있다고 생각했습니다.
참조: https://forums.mysql.com/read.php?10,285268,285286#msg-285286
원래 쿼리...
SELECT StudentId FROM Student WHERE condition = xyz
원래 결과 집합...
StudentId
1236
7656
8990
새 쿼리(concat...)
SELECT group_concat(concat_ws(',', StudentId) separator '; ')
FROM Student
WHERE condition = xyz
concat 문자열 결과 집합
StudentId
1236; 7656; 8990
참고: '분리자'를 원하는 대로 변경합니다.
GLHF!
이 값은 테이블의 NULL 값과 함께 작동하며 마지막에 하위 문자열 연산이 필요하지 않습니다. COALESCE는 테이블의 NULL 값과 잘 작동하지 않습니다(있는 경우).
DECLARE @results VARCHAR(1000) = ''
SELECT @results = @results +
ISNULL(CASE WHEN LEN(@results) = 0 THEN '' ELSE ',' END + [StudentId], '')
FROM Student WHERE condition = xyz
select @results
brad.v의 답이 틀렸습니다!연결된 문자열은 제공되지 않습니다.
여기 브래드처럼 정확한 코드가 있습니다.하지만 한 가지 중요한 변경 사항이 있습니다.
DECLARE @results VarChar(1000)
SELECT @results = CASE
WHEN @results IS NULL THEN CONVERT( VarChar(20), [StudentId])
ELSE @results + ', ' + CONVERT( VarChar(20), [StudentId])
END
FROM Student WHERE condition = abc;
차이가 보이나요?:) brad.v 답변을 수정해주세요, 저는 여기서 제 평판이 0이기 때문에 그것을 수정하거나 논평할 수 없습니다.당신이 당신 것을 고친 후에 제 것을 제거할 수 있을 것 같습니다.감사합니다!
STRING_AGG 사용:
SELECT STRING_AGG(sub.StudentId, ',') FROM
(select * from dbo.Students where Name = 'Test3') as sub
예를 들어 ORDER BY를 사용하려는 경우:
SELECT STRING_AGG(sub.StudentId, ',') WITHIN GROUP(Order by StudentId) FROM
(select * from dbo.Students where Name = 'Test3') as sub
또는 단일 선택 문...
DECLARE @results VarChar(1000)
SELECT @results = CASE
WHEN @results IS NULL THEN CONVERT( VarChar(20), [StudentId])
ELSE ', ' + CONVERT( VarChar(20), [StudentId])
END
FROM Student WHERE condition = abc;
변수를 선언할 때 값을 할당합니다.
DECLARE @result VARCHAR(1000) ='';
SELECT @result = CAST(StudentId AS VARCHAR) + ',' FROM Student WHERE condition = xyz
언급URL : https://stackoverflow.com/questions/4819412/convert-sql-server-result-set-into-string
'programing' 카테고리의 다른 글
푸시 알림 사용 권한 누락 (0) | 2023.07.15 |
---|---|
작업 공간에서 몇 가지 특정 개체만 지우려면 어떻게 해야 합니까? (0) | 2023.07.15 |
평균 시간 간격은 어떻게 합니까? (0) | 2023.07.15 |
Mongoose 및 Node.js 및 언더스코어로 코드를 생성하는 간단한 방법은 무엇입니까? (0) | 2023.07.15 |
열려는 파일이 As에서 파일 확장명으로 지정된 형식과 다릅니다.그물 (0) | 2023.07.15 |