iT邦幫忙

0

SQL Server的string_split() 函數

  • 分享至 

  • xImage

依據微軟官方的說法
https://learn.microsoft.com/zh-tw/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15
string_split的語法為:

STRING_SPLIT ( string , separator [ , enable_ordinal ] )  

其中第三個參數enable_ordinal之值為10

我在SSMS 18.12.1上操作SQL Server 2019,SSMS的inteliSense也有提示第三個參數資訊(如下圖)
inteliSense

但實際在第三個參數位置輸入1時卻報錯(訊息如下)
https://i.imgur.com/PvZn8z8.jpg

若捨棄第三個參數,則會正常回傳表格,但缺少ordinal欄位。
https://i.imgur.com/k2lRz85.jpg

請問大家如何才能做出如下圖的結果。
https://i.imgur.com/QQ3Va1I.jpg

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

4
rogeryao
iT邦超人 7 級 ‧ 2022-10-26 09:54:01
最佳解答
DECLARE @object as nvarchar(500) = 'test_string_split_order_string'
select
    value,
    ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNum
from STRING_SPLIT(@object, '_')

https://ithelp.ithome.com.tw/upload/images/20221026/20085021I6pGXekfRm.png

請參閱 : How do I enable ordinals from the STRING_SPLIT function in MSSQL

0
實習工程師
iT邦新手 1 級 ‧ 2022-10-26 09:52:10
SELECT 
	value 
	,ROW_NUMBER() OVER (ORDER BY value) AS ordinal
FROM string_split('A,B,C,D,E',',')

另外我有查一下 ordinal 的使用方式,可以參考一下
https://ithelp.ithome.com.tw/upload/images/20221026/201503183SHeOc4vr3.jpg

感謝您的回答。
我以下列的案例,順序會由(BACDE)變成(CEABD)。
所以,我將最佳解答給了 rogeryao

select 
    trim(value) as value
    , ROW_NUMBER() over (order by value) as ordinal 
from string_split('B,A, C,D, E', ',')

了解。感謝您的回覆

我要發表回答

立即登入回答