2013-06-26 42 views
1
ID   Dates           Qty  Secs DayPart 

CO138491-02 06/10/2013,06/11/2013,06/12/2013,06/13/2013 4  6.00 Morning 

如何更改這些逗號分隔值,並且在不使用CTE因素的情況下使用這種結果,因爲我在SQL SERVER 2000上,而且如果我們不使用循環,則更好。數據將是巨大的使用每個CSV值創建行

CO138491-02 06/10/2013 4 6.00 Morning 
CO138491-02 06/11/2013 4 6.00 Morning 
CO138491-02 06/12/2013 4 6.00 Morning 
CO138491-02 06/13/2013 4 6.00 Morning 

任何暗示將不勝感激或者任何一個環節來限制我的搜索

回答

4

試試這個

SELECT   a.ID, 
       SUBSTRING(',' + a.Dates + ',', n.Number + 1, CHARINDEX(',', ',' + a.Dates + ',', n.Number + 1) - n.Number - 1) AS [Value] 
       , [Qty], [Secs], [DayPart] 
FROM   Table1 AS a 
INNER JOIN  master..spt_values AS n ON SUBSTRING(',' + a.Dates + ',', n.Number, 1) = ',' 
WHERE   n.Type = 'p' 
       AND n.Number > 0 
       AND n.Number < LEN(',' + a.Dates + ',') 

檢查下面的鏈接以供參考

http://www.codeproject.com/Questions/526739/ConvertplusColumnplusdataplusintoplusRowsplusthrou

1

如果你不想使用CTE或循環,試圖用數字的附加表的使用方法:

http://www.sommarskog.se/arrays-in-sql-2000.html#tblnum-core

喜歡的東西:

CREATE FUNCTION inline_split_me (@param varchar(7998)) RETURNS TABLE AS 
    RETURN(SELECT substring(',' + @param + ',', Number + 1, 
        charindex(',', ',' + @param + ',', Number + 1) - Number - 1) 
       AS Value 
      FROM Numbers 
      WHERE Number <= len(',' + @param + ',') - 1 
      AND substring(',' + @param + ',', Number, 1) = ',') 
+0

其實我不想分離器,而每個價值與拆分字符串,此外,因爲它是一個巨大的數據我使用函數明智嗎? – brykneval

+0

我不知道另一種方式,除了這種情況下的功能。最有效的方法是使用CLR函數,但它不適用於MSSQL2000 –