【问题标题】:Replace Function - Handling single quotes and forward slashes in SQL SERVER 2008替换函数 - 在 SQL SERVER 2008 中处理单引号和正斜杠
【发布时间】:2018-12-19 13:50:19
【问题描述】:

我想替换数据库中存在单引号和斜杠的一些数据。

下面的行正是它在数据库中的显示方式,我只想从记录中删除 '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

似乎这应该是一个简单的修复,但我还没有运气 - 所有建议都值得赞赏。

【问题讨论】:

  • 你的代码怎么不工作?

标签: sql sql-server database sql-server-2008


【解决方案1】:

你的不起作用的原因是你没有包括引号。您正在寻找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),'')  

【讨论】:

  • scsimon, select replace(replace(@var,'''F/D''',''),',,',',') 工作 - 谢谢!
  • 完全没问题@RussellAlan
【解决方案2】:

如果逗号在正确的位置,您的第一个版本应该可以正常工作:

UPDATE tablename
    SET columnname = REPLACE(columnname, '''F/D'',', '')
    WHERE RECORDID = XXXXX;

请注意,如果 'F/D' 是值中的第一个或最后一个元素,它不会替换它。如果这是一个问题,我建议你再问一个问题。

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 2013-03-02
    • 2014-09-25
    • 1970-01-01
    • 2022-01-27
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多