Удалить элементы, которые в другой строке - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть столбец Аэропорты, где он имеет значения как «DXB, KWI, COK».

Мне нужно сравнить значение этого столбца со строкой типа «DXB, LHR», удалить значение столбца, которое в запятойразделенная строка?

После проверки со строкой я хочу обновить значение столбца как 'KWI, COK'.?Любые решения

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

Идентификатор столбца аэропорта 1 будет обновляться как «COK, DXB», удаляя dxb, который находится в сравниваемом запятом значении?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

ALTER FUNCTION [dbo]. [SplitString] (
@Input NVARCHAR (MAX), @Character CHAR (1)) RETURNS @Output TABLE (Item NVARCHAR (1000)), КАК НАЧАТЬ, ОТКЛЮЧИТЬ @StartIndex INT, @EndIndexINT

  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), символ @chars (1)

) ВОЗВРАЩАЕТСЯ @ OUTput TABLE (Элемент NVARCHAR (1000)) КАК НАЧИНАЕТСЯ
INSERT INTO @output выбирает SP1.Item из dbo.SplitString (@ string1, @ chars) как SP1 ВЛЕВО СОЕДИНЯЕТ dbo.SplitString (@ string2,@chars) как SP2 ON SP1.Item = SP2.Item WHERE sp2.Item IS NULL RETURN END

Используя эти две функции, мы можем легко получить значения

0 голосов
/ 16 апреля 2019

Попробуйте использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...