我有一列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吗?
答案 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
返回
结束
通过使用这两个函数,我们可以轻松获取值