删除另一个字符串中的元素

时间:2019-04-15 21:34:51

标签: sql-server sql-server-2008

我有一列Airports,其值为'DXB,KWI,COK'。

我需要将这些列值与'DXB,LHR'这样的字符串进行比较,以删除以逗号分隔的字符串中的列值?

在检查了字符串之后,我想将列值更新为“ KWI,COK”。 任何解决方案

Airports         |id
_____________________
dxb,cok,kwi     |1
cok,dxb         |2
kwi,dxb         |3

将ID为1的机场列更新为“ COK,DXB”,以删除比较逗号分隔值中的dxb吗?

2 个答案:

答案 0 :(得分:0)

尝试使用REPLACE功能:

CREATE TABLE #Test(
  Airports varchar(256),
  id int
)

INSERT #Test(Airports,id)VALUES('dxb,cok,kwi',1)
INSERT #Test(Airports,id)VALUES('cok,dxb',2)
INSERT #Test(Airports,id)VALUES('kwi,dxb',3)
INSERT #Test(Airports,id)VALUES('kwi,dxb,zxc',4)
INSERT #Test(Airports,id)VALUES('dxb',5)
INSERT #Test(Airports,id)VALUES('aaa,bbb',6)

SELECT *,REPLACE(REPLACE(REPLACE(Airports,'dxb,',''),',dxb',''),'dxb','')
FROM #Test

UPDATE #Test
SET
  Airports=REPLACE(REPLACE(REPLACE(Airports,'dxb,',''),',dxb',''),'dxb','')
WHERE Airports LIKE '%dxb%'

SELECT *
FROM #Test

DROP TABLE #Test

答案 1 :(得分:0)

ALTER FUNCTION [dbo]。[SplitString] (
      @输入NVARCHAR(MAX),       @字符CHAR(1) ) 返回@Output TABLE(       项目NVARCHAR(1000) ) 如 开始       宣告@StartIndex INT,@ EndIndex INT

  SET @StartIndex = 1
  IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
  BEGIN
        SET @Input = @Input + @Character
  END

  WHILE CHARINDEX(@Character, @Input) > 0
  BEGIN
        SET @EndIndex = CHARINDEX(@Character, @Input)

        INSERT INTO @Output(Item)
        SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)

        SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
  END

  RETURN

END

ALTER FUNCTION [dbo]。[DistinctSplitString] (     @ string1 nvarchar(max),     @ string2 nvarchar(max),     @字符(1)

) 返回@Output TABLE(       项目NVARCHAR(1000) ) 如 开始
        插入@输出         从dbo.SplitString(@ string1,@ chars)中选择SP1.Item作为SP1         左联接dbo.SplitString(@ string2,@ chars)as SP2         开启SP1.Item = SP2.Item         其中sp2.Item为NULL     返回 结束

通过使用这两个函数,我们可以轻松获取值