我有一张表:
ID | Value
----------------
1 | One
2 | Two
3 | Three
我需要做的是从这些值创建一个字符串,格式为:
'1: One, 2: Two, 3: Three'
我知道如何使用游标执行此操作,但它将在视图中用作列,因此它不是真正的高性能选项。 有什么指针吗?
答案 0 :(得分:5)
WITH T(ID,Value) AS
(
SELECT 1, 'One' UNION ALL
SELECT 2, 'Two' UNION ALL
SELECT 3, 'Three'
)
SELECT STUFF(
(SELECT ', ' + CAST(ID as varchar(11)) + ': ' + Value
FROM T
FOR XML PATH (''))
, 1, 2, '')
答案 1 :(得分:4)
看看像
这样的东西DECLARE @Table TABLE(
ID INT,
Value VARCHAR(20)
)
INSERT INTO @Table SELECT 1,'One'
INSERT INTO @Table SELECT 2,'Two'
INSERT INTO @Table SELECT 3,'Three'
SELECT STUFF(
(
SELECT ', ' + CAST(ID AS VARCHAR(MAX)) + ': ' + Value
FROM @Table
FOR XML PATH(''), TYPE
).value('.','varchar(max)')
,1,2, ''
)
答案 2 :(得分:3)
SELECT STUFF((
SELECT ' ' + CAST(ID AS VARCHAR(2)) + ': '+ Value
FROM dbo.Table
FOR XML PATH('')
), 1, 1, ''
) As concatenated_string
答案 3 :(得分:1)
DECLARE @ans VARCHAR(max)
SET @ans =''
SELECT @ans = @ans + str(id)+':'+ value FROM table
SELECT @ans
如果您的SQL版本不支持,请将max更改为8000
答案 4 :(得分:0)
如果可能的话,我根本不会在数据库中这样做。它不是以某种方式格式化数据而设计的;让调用应用程序处理。
在C#中(假设data
是SqlDataReader的一个实例):
var l = new List<string>();
while (reader.Read())
l.Add(string.Format("{0}: {1}", reader[0], reader[1]));
var s = string.Join(", ", l.ToArray());