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上,如果我们不使用循环,那么它会更好,后者数据会变得很大
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
任何提示都会受到赞赏或任何限制我搜索的链接
答案 0 :(得分: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 :(得分: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) = ',')