2012-02-01 56 views
0

使用SQL Server 10.0和10.5使用SUBSTRING之类的东西一起

我想多行读取到一个行和逗号它们分开在SELECT语句

如果我这样做:

SELECT STUFF(CAST(rating AS VARCHAR),1,0,',') 
FROM product_reviews 
WHERE product_id = 8995 
FOR XML PATH('') 

除了领先的逗号之外,我得到了期望的结果。

所以我改的第一行试图删除前导逗号,像这样:

SELECT SUBSTRING(STUFF(CAST(rating AS VARCHAR),1,0,','),2,999) 
FROM product_reviews 
WHERE product_id = 8995 
FOR XML PATH('') 

这将删除所有的逗号。

接下来,我试试这个:

SELECT SUBSTRING(ratings,2,999) 
FROM (SELECT STUFF(CAST(rating AS VARCHAR),1,0,',') AS ratings 
     FROM product_reviews 
     WHERE product_id = 8995 
     FOR XML PATH('')) tmp 

但是,这只是给我的错误:

Msg 8155, Level 16, State 2, Line 5 
No column name was specified for column 1 of 'tmp'. 
Msg 207, Level 16, State 1, Line 1 
Invalid column name 'ratings'. 

我用其他的名字列1同样的错误

我知道我可以创建一个程序来做到这一点,但这不是我在这里需要的。

任何帮助表示赞赏。

谢谢

回答

1

如何

SELECT STUFF(
(
    SELECT 
     ',', 
     CAST(rating AS VARCHAR) 
    FROM product_reviews 
    WHERE product_id = 8995 
    FOR XML PATH('') 
), 1, 1, '') 
+0

辉煌 - 谢谢 – Graham 2012-02-01 11:22:26

1
SELECT SUBSTRING((
    SELECT STUFF(CAST(rating AS VARCHAR),1,0,',') 
    FROM product_reviews 
    WHERE product_id = 8995 
    FOR XML PATH('') 
), 2, 999) 
+0

这是与以前相同的错误出现:消息8155,级别16,状态2,8号线 是为列指定任何列名't'的1个。 消息207,级别16,状态1,行1 无效的列名称'str' – Graham 2012-02-01 11:33:19

+0

对不起,更正 – 2012-02-01 11:39:46

+0

现在的作品 - 欢呼声。我更喜欢以前的解决方案,因为它不依赖于结果少于999个字符。但是,当CAST被移除时,您的工作正常。 – Graham 2012-02-01 11:53:52

相关问题