我在SQL Server中获得结果
SELECT StudentId FROM Student WHERE condition = xyz
我得到了像
这样的输出StudentId 1236 7656 8990 ........
存储过程的输出参数是@studentId
字符串,我希望return语句为
1236, 7656, 8990.
如何在单个字符串中转换输出?
我正在返回单列[即。 StudentId]
答案 0 :(得分:56)
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
答案 1 :(得分:44)
测试一下:
DECLARE @result NVARCHAR(MAX)
SELECT @result = STUFF(
( SELECT ',' + CONVERT(NVARCHAR(20), StudentId)
FROM Student
WHERE condition = abc
FOR xml path('')
)
, 1
, 1
, '')
答案 2 :(得分:8)
使用COALESCE
功能:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
答案 3 :(得分:7)
两个答案都有效,但不要忘记初始化变量的值,默认为NULL并使用T-SQL:
NULL + "Any text" => NULL
这是一个非常常见的错误,别忘了!
使用ISNULL函数也是个好主意:
SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student
答案 4 :(得分:1)
使用CONCAT
功能可避免转换错误:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID)
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
答案 5 :(得分:1)
以下是针对MySQL(而非SQL Server)的解决方案,我无法在mysql的stackoverflow上轻松找到针对此问题的解决方案,因此我认为这可能会对某人有所帮助...
ref: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!
答案 6 :(得分:0)
或单个选择声明......
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;
答案 7 :(得分:0)
这个与表中的NULL值一起使用,并且最后不需要子串操作。 COALESCE在表中没有很好地处理NULL值(如果它们在那里)。
-v /var/run/docker.sock:/var/run/docker.sock
答案 8 :(得分:0)
answer中的brad.v不正确!它不会为您提供串联的字符串。
这是正确的代码,几乎像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,请修正您的答案,我无法采取任何措施予以纠正或评论,因为我的声誉为零。我想我可以在修复您的问题后将其删除。谢谢!
答案 9 :(得分:0)
在声明变量时分配一个值。
DECLARE @result VARCHAR(1000) ='';
SELECT @result = CAST(StudentId AS VARCHAR) + ',' FROM Student WHERE condition = xyz