2012-02-01 59 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

相關問題