我必须从存储在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
答案 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