如何在句子中找到特定的字符串并删除sql中的字符串

时间:2017-05-20 15:55:46

标签: c# sql

我必须从存储在SQL数据库中的句子中删除特定值。句子将如下所示:

1 Payments:ihj - CHENNAI-HIRE:54005-TN69AZ54008,4021-TN69AZ54005

2 Payments:ihj - CHENNAI-HIRE:54004-TN69AZ54008,4021-TN69AZ54005,54005-TN69AZ54008

在上面的句子54004中,我将作为参数传递给SQL。这是我要从此行中删除的号码,但此行中的号码与TN69AZ54005相同。这个数字不应该被打扰,而在另一个付款中我们在另一个地方有相同的金额。任何人都可以帮忙吗?

我试过这个SQL查询

declare @text int=4019

select SUBSTRING(notes,CHARINDEX(cast(@text as varchar),notes),
                             len(notes)-CHARINDEX(',',notes)+1) 
                             from Accounts.TransactionNotes 
                             where TransactionID=1978

如果我使用此查询,则会影响包含此行TN69AZ54005

3 个答案:

答案 0 :(得分:1)

我可以看到您在问题中添加了C#标记。那么最简单的方法就是使用你的应用程序选择所有必要的行,然后遍历它们并根据需要更改字符串(例如使用PHP preg_replace()等效)并更新SQL行。

我认为这是最简单的方法,不是真正的SQL解决方案,但仍然......

答案 1 :(得分:1)

update <table> set notes = replace(notes, 'HIRE:'+ str(<inputparam>),'HIRE:') where transactionid=<transactionid>

update <table> set notes = replace(notes, ','+ str(<inputparam>),',') where transactionid=<transactionid>

您需要找到一些可以为inputpram值添加前缀的内容,例如上面的示例我使用的是"HIRE:"或逗号。

另一种方法是使用REGEXP来查找整个单词,然后一个查询就足够了。但我还没试过。

  

这里的问题不是查询,而是设计的人   数据库中。

答案 2 :(得分:0)

我不确定这是你想要的,但我会通过我的代码。 :)

-- for test create #temp
SELECT 
A.DATA
INTO #Temp
FROM
(
SELECT 'Payments:ihj - CHENNAI-HIRE:54005-TN69AZ54008,4021-TN69AZ54005' AS DATA 
UNION
SELECT 'Payments:ihj - CHENNAI-HIRE:54004-TN69AZ54008,4021-TN69AZ54005,54005-TN69AZ54008' AS DATA
) AS A

GO 

-- this you want?
UPDATE #Temp
SET DATA = REPLACE(DATA,'54004','')
GO

-- select changed data
SELECT * FROM #Temp