我想替换数据库中存在单引号和斜杠的一些数据。
下面的行正是它在数据库中的显示方式,我只想从记录中删除"F/D"。
('P/P','F/D','DFC','DTP')
一直在使用变体
UPDATE tablename SET columnname = REPLACE(columnname, '''F/D,''', '')
WHERE RECORDID = XXXXX
也一直在使用变体
UPDATE tablename SET columnname = REPLACE(columnname, 'F/D,', '')
WHERE RECORDID = XXXXX
似乎这应该是一个简单的修复,但我还没有运气 - 所有建议都值得赞赏。
你的不起作用的原因是因为你没有包含引号。您正在寻找F/D,
和'F/D,'
以及您的数据'F/D',
。
如果只是从要删除的所有值中'F/D'
,则还需要删除逗号和引号。此方法删除'F/D'
,然后删除任何双逗号(如果'F/D'
位于字符串中间)。
declare @var varchar(64) = '(''P/P'',''F/D'',''DFC'',''DTP'')'
select replace(replace(@var,'''F/D''',''),',,',',')
--update tablename
--set columnname = replace(replace(columnname,'''F/D''',''),',,',',')
--where RECORDID = 1324
如果要替换字符串中的第二个元素,这里有一种方法:
select
@var
--find the location of the first comma
,charindex(',',@var,0)
--find the location of the second comma
,charindex(',',@var,charindex(',',@var) + 1)
--Put it all together, using STUFF to replace the values between this range with nothing
,stuff(@var,charindex(',',@var,0),charindex(',',@var,charindex(',',@var) + 1) - charindex(',',@var,0),'')
如果逗号在正确的位置,您的第一个版本应该可以正常工作:
UPDATE tablename
SET columnname = REPLACE(columnname, '''F/D'',', '')
WHERE RECORDID = XXXXX;
请注意,如果它是值中的第一个或最后一个元素,这不会替换'F/D'
。 如果这是一个问题,我建议你问另一个问题。