现在我发现了这个很棒的string_split()
函数,然后我了解到**输出行可能是任意顺序的,但不能保证顺序与输入字符串.**中子字符串的顺序相匹配,这使得这个函数对我来说毫无用处。
有没有变通的办法?
**编辑-**示例:
SELECT value FROM String_Split('b,a,c', ',')
在这种情况下,我希望按以下顺序得到结果:
value
------
b
a
c
但是,根据微软的说法,这个订单是不保证的。那么我怎么才能准确地得到这个结果呢?
现在我发现了这个很棒的string_split()
函数,然后我了解到**输出行可能是任意顺序的,但不能保证顺序与输入字符串.**中子字符串的顺序相匹配,这使得这个函数对我来说毫无用处。
有没有变通的办法?
**编辑-**示例:
SELECT value FROM String_Split('b,a,c', ',')
在这种情况下,我希望按以下顺序得到结果:
value
------
b
a
c
但是,根据微软的说法,这个订单是不保证的。那么我怎么才能准确地得到这个结果呢?
3条答案
按热度按时间wdebmtf21#
您可以尝试使用基于JSON的方法,需要将输入字符串转换为有效的JSON数组(
b,a,c
转换为["b","a","c"]
),然后使用OPENJSON()
和默认模式解析该数组。结果是一个包含key
、value
和type
列的表,根据文档,key
列是 * nvarchar(4000)值,它包含指定属性的名称或指定数组中元素的索引 *。声明:
结果:
如果输入字符串中包含引号,请尝试使用
STRING_ESCAPE()
执行以下语句:结果:
从SQL Server 2022开始,
STRING_SPLIT()
函数支持第三个可选参数(enable_ordinal
)。该参数是int
或bit
表达式,用作启用或禁用ordinal
输出列的标志。值1
启用ordinal
列。如果省略enable_ordinal
,NULL
,或具有0
的值,则禁用ordinal
列。2guxujil2#
如果要拆分的字符串中没有重复项,则可以使用下面的。
093gszye3#