首页 > 解决方案 > 如何从sql中的逗号分隔字符串中删除_符号后的值?

问题描述

如何在 _ 登录 sql 后删除值。

以下是样本数据:1_1,2_2,3_3,4_40

Sql 代码

    Declare @var1 nvarchar(max)
    Set @var1 ='1_1,2_2,3_3,4_40'

    Select @var1

所需输出:1,2,3,4

标签: sqlsql-server

解决方案


假设您使用的是完全支持的 SQL Server 版本,您可以使用拆分字符串,STRING_SPLIT然后删除尾随字符:LEFTCHARINDEX

DECLARE @var1 nvarchar(MAX);
SET @var1 = N'1_1,2_2,3_3,4_40';

SELECT LEFT(SS.[value], CHARINDEX('_', SS.[value]) - 1)
FROM STRING_SPLIT(@var1,',') SS;

如果下划线可能不在字符串中,您可以使用NULLIFandLEN来避免错误:

DECLARE @var1 nvarchar(MAX);
SET @var1 = N'1_1,2_2,3_3,4_40,5';

SELECT LEFT(SS.[value], ISNULL(NULLIF(CHARINDEX('_', SS.[value]),0) - 1,LEN([value])))
FROM STRING_SPLIT(@var1,',') SS;

如果您使用的不是完全受支持的 SQL Server 版本,则需要使用 UDF(例如DelimitedSplit8k_LEAD)、XML 拆分器或创建 CLR 函数。


推荐阅读