我有以下表格,其中包含三列包含字符串值。
ID strOriginal strNew strFinal
1 '122,234,23,22,554' '23,22' '122,234,554'
2 '122,23,22,554,998,856,996' '554,998,856,996' '122,23,22'
3 '60,89,65,87,445,54' '87' '60,89,65,445,54'
现在在最后一列中,我需要比较两个列值并在strFinal列中获取结果值,该列具有除strNew值之外的所有strOriginal列值。
有人可以建议我在SQL中怎么做吗?
提前致谢。
答案 0 :(得分:2)
您可以尝试以下查询:
select *,
case when patindex('%'+STRNEW+'%',STRORIGINAL)>=1
then replace(replace (STRORIGINAL,STRNEW,''),',,',',')
else STRORIGINAL
end final_String
from table1
<强> SQL FIDDLE 强>
答案 1 :(得分:0)
以下是可能有用的链接。 Remove second appearence of a substring from string in SQL Server
但是,在此链接中,字符串由&#39; /&#39;分隔。在哪里可以替代&#39;,&#39;并且还需要稍作修改。
答案 2 :(得分:0)
请尝试以下操作,首先将表名([Table_3])替换为您的名称。
DECLARE @S varchar(max),
@S1 varchar(max),
@Split char(1),
@X xml,
@X1 xml;
SET @Split = ',';
SELECT @S = [strOriginal] FROM [Table_3] Where id=2;
SELECT @S1 = [strNew] FROM [Table_3] Where id=2;
SELECT @X =
CONVERT(xml,' <root> <s> ' + REPLACE(@S,@Split,'</s> <s>') + ' </s> </root> ')
SELECT @X1 =
CONVERT(xml,' <root> <s> ' + REPLACE(@S1,@Split,'</s> <s>') + ' </s> </root> ')
Select * From
(
SELECT [Value] = LTrim(T.c.value('.','varchar(20)'))
FROM @X.nodes('/root/s') T(c)
)
As CollectionVal
Where [Value] Not In
(
SELECT [Value1] = LTrim(T1.c1.value('.','varchar(20)'))
FROM @X1.nodes('/root/s') T1(c1)
)
答案 3 :(得分:0)
创建一个将CSV值转换为表格的函数(请参阅this post以获取此示例)
然后,设置一个触发器以自动更新INSERT / UPDATE
上的第三列CREATE TRIGGER INS_TempData
ON TempData
AFTER INSERT, UPDATE
AS
BEGIN
--This will ONLY work against a single row at a time. It will need to be modified to work with bulk operations
SET NOCOUNT ON;
--Declare are placeholders
DECLARE @original varchar(200)
DECLARE @new varchar(200)
DECLARE @final varchar(200)
DECLARE @id int
--Populate our variables with the inserted values
SELECT @id = id, @Original = stroriginal, @new = strnew FROM INSERTED
SELECT @final = SUBSTRING(
(SELECT ',' + a.value from [dbo].[UTILfn_Split](@original,',') a
LEFT JOIN [dbo].[UTILfn_Split](@new,',') b on a.value = b.value
--Eliminate the strNew values from the result
WHERE b.value IS NULL
FOR XML PATH('')
),2,200000)
--Update the table with the final value
UPDATE TempData SET strFinal = @final where id = @id
END
GO
注意:将TempData
更改为您的表格名称
然后,当您插入新数据时
INSERT INTO TEMPDATA(STRORIGINAL, STRNEW) VALUES ('122,234,23,22,554' ,'23,22')
StrFinal
会自动填充122,234,554