2016-07-04 39 views
0

幾周前,我發表了一篇文章,以獲得有關將逗號分隔的值列表轉換爲可用作Oracle中IN子句一部分的格式的幫助。這裏是該帖子的鏈接。需要幫助將Oracle Query轉換爲SQL Server

Oracle invalid number in clause

答案是列表分裂成一個單獨的行每個值。這是我最終使用的答案。

SELECT trim(regexp_substr(str, '[^,]+', 1, LEVEL)) str 
    FROM (SELECT '1,2,3,4' str FROM dual) 
    CONNECT BY instr(str, ',', 1, LEVEL - 1) > 0 

有沒有一種方法可以在SQL Server中執行類似的操作,而無需創建自定義函數?我注意到有一個STRING_SPLIT函數,但我似乎無法訪問這個SQL Server上的。

任何意見,你可能會不勝感激。在這一天的大部分時間裏,我一直試圖對此進行刺探。

回答

1

String_split功能在MS SQL Server 2016版本中可用。如果您使用舊版本,則可以編寫幾行相同的代碼。

declare @str varchar(100)='1,2,3,4' --initial string 
;with cte as (--build xml from the string 
select cast('<s>'+replace(@str,',','</s><s>')+'</s>' as xml) x 
) 
--receive rows 
select t.v.value('.[1]','int') value 
from cte cross apply cte.x.nodes('s') t(v) 
+0

這很棒!謝謝。 – JoeBrewing

+0

我仍然有很多要學習SQL。 – JoeBrewing