Sql 从逗号分隔的字符串中删除特定值的所有实例

Sql 从逗号分隔的字符串中删除特定值的所有实例,sql,sql-server,string,csv,tsql,Sql,Sql Server,String,Csv,Tsql,我希望在不拆分或不使用XML功能的情况下从以下字符串中删除给定值(例如1) /* input: */ @ObjectValue = '1,121,4,5,1,111,131,1' /* output: */ '121,4,5,111,131' 我认为最简单的方法是: SELECT TRIM(',' from REPLACE(',' + @ObjectValue + ',', ',1,', ',')) TRIM()在旧版本的SQL Server中不可用。一种方法是使用空格替换逗号,并使用可

我希望在不拆分或不使用XML功能的情况下从以下字符串中删除给定值(例如
1

/* input:  */ @ObjectValue = '1,121,4,5,1,111,131,1'
/* output: */ '121,4,5,111,131'

我认为最简单的方法是:

SELECT TRIM(',' from REPLACE(',' + @ObjectValue  + ',', ',1,', ','))
TRIM()
在旧版本的SQL Server中不可用。一种方法是使用空格替换逗号,并使用可用的修剪功能:

SELECT REPLACE(LTRIM(RTRIM(REPLACE(REPLACE(',' + @ObjectValue + ',', ',1,', ','), ',', ' '))), ' ', ','),

您需要将列表中的分隔符加倍,以便
1,1,1
变为
,1,1,1,
。然后更换所有
、1、
,然后进行清理:

SELECT ObjectValue, REPLACE(
    LTRIM(RTRIM(
        REPLACE(' ' + REPLACE(ObjectValue, ',', '  ') + ' ', ' 1 ', '')
    )), '  ', ','
)
FROM (VALUES
    ('1'),
    ('1,1'),
    ('1,1,1'),
    ('0,1,0'),
    ('0,1,1,0'),
    ('0,1,1,1,0'),
    ('0,1,0,1,0'),
    ('1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1')
) AS v(ObjectValue)

情况如何?总是第一个也是最后一个?还是始终
1
?您需要指定规则和条件这是您不应该存储cvs数据的原因之一。规范化您的数据,您将永远不会遇到这个问题。这将是一个丑陋的查询。我建议避免以这种方式使用CSV。如果将数据导入SQL Server,则应将其规范化。您使用的是哪个SQL Server版本?所有“1”无论是在开始、中间还是结束时都需要替换
,1,
,而不仅仅是
,1
?(并替换为
?)对于
1100,1
(离开
00
)@deepattel。有个打字错误。所有这些逗号和引号,很难跟踪它们的去向。要替换的值是
',1',
。对于
1,1,1,1
,这也是错误的。
-- SSMS 2017
DECLARE @ObjectValue VARCHAR(100) = '1,121,4,5,1,111,131,1'
SELECT TRIM(',' FROM REPLACE(REPLACE(',' + @ObjectValue  + ',', ',1,', ','),',1,', ','))

-- SSMS 2016 or earlier 

    DECLARE @Replacetxt VARCHAR(MAX)

    SET @ObjectValue=REPLACE(REPLACE(','+@ObjectValue+',', ',1,', ','), ',1,', ',') --Replace ',1,' with ','

    SET @Replacetxt=REVERSE(SUBSTRING(@ObjectValue, PATINDEX('%[^,]%', @ObjectValue), LEN(@ObjectValue))) -- Remove comma from starting and reverse string

    SELECT REVERSE(SUBSTRING(@Replacetxt, PATINDEX('%[^,]%', @Replacetxt), LEN(@ObjectValue))) -- Remove comma from ending and reverse string