我将字符串分割成逗号分隔的一些值。 但是,某些值的末尾会有一个逗号。
示例
Userid | Value
1 | A,B,C,D,
2 | F,H
代码
select value
from string_split('A,B,C,D,',',')
当前输出
UserId | Value
1 | A
1 | B
1 | C
1 | D
1 |
如果没有后续数据,是否有任何方法可以使字符串拆分函数忽略最后一个逗号?
所需的输出
UserId | Value
1 | A
1 | B
1 | C
1 | D
使用MSSQL
答案 0 :(得分:0)
STRING_SPLIT函数不支持较低版本的sql server,因此请先创建一个函数以拆分给定的字符串,然后将该函数与您的select查询结合。以下是为您提供预期结果的示例。 创建的用户定义函数
CREATE FUNCTION [dbo].[Udf_StringSplit]
(
@Userid INT,
@Value VARCHAR(1000)
)
RETURNS @Result TABLE(
Userid INT,
Value VARCHAR(10)
)
AS BEGIN
DECLARE @Data AS TABLE
(
Userid INT,
Value VARCHAR(100)
)
INSERT INTO @Data(Userid,Value)
SELECT @Userid, @Value
INSERT INTO @Result(Userid,Value)
SELECT Userid,
Split.a.value('.','nvarchar(1000)') AS Value
FROM
(
SELECT Userid,
CAST('<S>'+REPLACE(@Value,',','</S><S>')+'</S>' AS XML) Value
FROM @Data
) AS A
CROSS APPLY Value.nodes('S') AS Split(a)
WHERE Userid=@Userid AND Split.a.value('.','nvarchar(1000)') <>''
RETURN
END
GO
样本数据表
DECLARE @Data AS TABLE(Userid INT , Value VARCHAR(100))
INSERT INTO @Data
SELECT 1,'A,B,C,D,' UNION ALL
SELECT 2,'F,H'
Sql脚本以获取预期结果
SELECT d.Userid,
f.Value
FROM @Data d
CROSS APPLY [dbo].[Udf_StringSplit] (d.Userid,d.Value) AS f
WHERE d.Userid=1
GO
结果
Userid Value
------------
1 A
1 B
1 C
1 D
答案 1 :(得分:0)
只需添加“ WHERE”这样的句子:
select value
from string_split('A,B,C,D,',',')
WHERE value <> ''