替换记录SQL Server中的报价

时间:2014-04-24 17:32:16

标签: sql sql-server sql-server-2008 tsql

我有带引号的记录,我想用''代替。

示例:

"ASKHELLO"SE   -->    ASKHELLO SE 
""HELLO""1     -->    HELLO 1

如何在SQL Server中执行此操作?

我知道替换功能,但是如何让模式检查是否为""以外的任何字符。

UPDATE
   wordname
SET
   wordname = REPLACE(deal, '"'+ '%', '')

这是不正确的。请帮忙。

3 个答案:

答案 0 :(得分:1)

我根据您对原始答案的双倍空格的评论添加了另一个答案。在这种情况下ID是任意的,但我总是拥有某种主键的粉丝。我们再次见面的XML!

--Setup the Table
DECLARE @T TABLE (wordname VARCHAR(25))
INSERT INTO @T VALUES ('"ASKHELLO"SE'),('""HELLO""1')
SELECT * FROM @T

--DECLARE AND SET XML REPLACING " with spaces
DECLARE @XML XML = 
(
SELECT ROW_NUMBER() OVER (ORDER BY wordname ASC) AS "@ID",
      CONVERT(XML,'<PART>' + REPLACE(CAST(CAST(REPLACE(wordname, '"',' ') AS VARCHAR(25)) AS VARCHAR(max)),' ',' </PART><PART>') + '</PART>') AS Word
FROM      @T AS T
      FOR XML PATH('Node'), ROOT('Nodes'), ELEMENTS, TYPE
)
SELECT @XML


--SHRED THE XML (WHICH WILL REMOVE NULLS) AND TRIM
;WITH
SHRED AS
(
SELECT  ID = FieldAlias.value('(@ID)[1]','INT'),
       WordName = FieldAlias.value('(Word)[1]','varchar(max)')
FROM       @XML.nodes('/Nodes/Node') AS TableAlias(FieldAlias)
)
SELECT  S.ID,
       LTRIM(RTRIM(S.WordName)) AS WordName
FROM       Shred AS S

enter image description here

此时更新碎片结果集应该相对微不足道,但如果您需要,请告诉我。将@T替换为原始表以提取数据集。

答案 1 :(得分:0)

REPLACE函数在字符串中执行全局替换。所以你可以做简单的

UPDATE
   wordname
SET
   deal = REPLACE(deal, '"', '')

假设“wordname”是你的表,“deal”是你要替换的字段。

这将简单地删除双引号。如果您需要使用空格替换' '而不是''

答案 2 :(得分:0)

这对你有帮助吗?在更换后尝试使用LTRIM去除前导空格。以下是基于您的代码的简单示例:

DECLARE @T TABLE (wordname VARCHAR(25))
INSERT INTO @T VALUES ('"ASKHELLO"SE'),('""HELLO""1')
SELECT * FROM @T

SELECT  LTRIM(REPLACE(wordname, '"',' '))
FROM       @T

enter image description here