私は次のようにSQL Serverで結果を得ています
SELECT StudentId FROM Student WHERE condition = xyz
私は次のような出力を得ています
StudentId 1236 7656 8990 ........
ストアドプロシージャの出力パラメーターは@studentId
文字列とreturnステートメントが
1236, 7656, 8990.
出力を単一の文字列に変換するにはどうすればよいですか?
単一の列を返します[つまり、学生証]
これをテストします:
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
または単一の選択ステートメント...
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;
answer from brad.v は間違っています!連結された文字列は提供されません。
brad.v のようなものですが、1つの重要な変更を加えた正しいコードを次に示します。
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 あなたの答えを修正してください、私はそれを修正したりコメントしたりすることはできません。あなたが修正した後、私は私のものを削除できると思います。ありがとう!
これはテーブルの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