我想在 SQL Server 2012 中拆分逗號分隔的字串。我對 XML 解決方案感興趣,而不是函式或 while 回圈(性能和權限原因)。我讀了這篇文章:SQL Server 2012 中的 STRING_SPLIT很有幫助,但是,我的背景關系不是拆分變數而是拆分表中的列。以下是我正在使用的資料集型別的示例:
CREATE TABLE #EXAMPLE
(
ID INT,
LIST VARCHAR(1000)
)
INSERT INTO #EXAMPLE
VALUES (1, '12345,54321'), (2, '48965'), (3, '98765,45678,15935'), (4, '75315')
SELECT * FROM #EXAMPLE
DROP TABLE #EXAMPLE
鑒于該資料集,我如何在逗號上拆分 LIST 欄位以便獲得此資料集?
CREATE TABLE #EXAMPLE
(
ID INT,
LIST VARCHAR(1000)
)
INSERT INTO #EXAMPLE
VALUES (1, '12345'), (1, '54321'), (2, '48965'), (3, '98765'), (3, '45678'), (3, '15935'), (4, '75315')
SELECT * FROM #EXAMPLE
DROP TABLE #EXAMPLE
我覺得我正在用表格列而不是變數來實作它,但我確信它非常相似。我將不勝感激任何輸入。謝謝!
uj5u.com熱心網友回復:
如果您想要一個 XML 解決方案,以下內容應該足夠了。
注意 - 這很容易包裝在一個可重用的表值函式中,但是你宣告你不需要一個函式,所以只使用行內。
select e.id, s.List
from #example e
cross apply (
select List = y.i.value('(./text())[1]', 'varchar(max)')
from (
select x = convert(xml, '<i>' replace(e.list, ',', '</i><i>') '</i>').query('.')
) as a cross apply x.nodes('i') as y(i)
)s
見作業小提琴
uj5u.com熱心網友回復:
考慮到您的鏈接,這可以通過添加 Cross Apply 稍微更改查詢來完成。
Select e.ID, t.a
From #Example As e Cross Apply (
SELECT Split.a.value('.', 'NVARCHAR(MAX)') DATA
FROM
(
SELECT CAST('<X>' REPLACE(e.List, ',', '</X><X>') '</X>' AS XML) AS String
) AS A
CROSS APPLY String.nodes('/X') AS Split(a)) As t(a)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/350605.html
標籤:sql-server 查询语句
