【问题标题】:Replace single quote / apostrophe in NTEXT column替换 NTEXT 列中的单引号/撇号
【发布时间】:2019-04-29 14:42:40
【问题描述】:

我在表中有一个 NTEXT 列,其中包含带单引号的 XML 标记数据。我必须用空白替换具有 XML 标记数据和引号的字符串。

我在 col 中有如下数据

<?xml version="1.0" encoding="utf-8" ?> <securesite>   <content>     <formsections>       <version>12</version>       <introduction>         <p>Based on the product </p>         <p>If you are registered for  </p>     <p>                     <![CDATA[         **<p><b>Can't see your form in the list below</b></p>**         <a href="http://www.testcom.aspx" target="_blank" alt="View forms">View forms</a>         ]]>                 </p><.....

我必须删除字符串

<p><b>Can't see your form in the list below</b></p>

我曾尝试使用以下查询,但没有奏效:

UPDATE Table SET Col = REPLACE( Col, '  <p><b>Can't see your form in the list below</b></p>  ', '')

还尝试将单引号替换为''''单引号:

UPDATE Table SET Col = REPLACE( Col, '  <p><b>Can''''t see your form in the list below</b></p>  ', '')

我也试过这个:

UPDATE Table SET Col =REPLACE( CAST( col as varchar(max) ), '  <p><b>Can''''t see your form in the list below</b></p>  ', '')

也按照建议尝试了

DECLARE @YourOriginalText NVARCHAR(MAX)
DECLARE @YourModifiedText NVARCHAR(MAX)

SELECT @YourOriginalText = CAST(Col AS NVARCHAR(MAX))FROM [Table]
SET @YourModifiedText = REPLACE( CONVERT(NVARCHAR(MAX), Col), N'  <p><b>Can''t see     your form in the list below</b></p>  ', '')
SELECT @YourModifiedText

UPDATE [Table] SET Col= CAST(@YourModifiedText AS NTEXT)

但它也没有奏效。

你能指导我正确的方向并告诉我如何替换文本吗?

【问题讨论】:

  • 你试过SET QUOTED_IDENTIFIER OFF吗?

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


【解决方案1】:

转义的单引号是两个单引号,而不是四个。此外,NTEXT 似乎不适用于REPLACE 函数,因为您收到以下错误:

消息 8116,第 16 级,状态 1,第 1 行
参数数据类型 ntext 对于替换函数的参数 1 无效。

所以,试试这个(NTEXT不能和=比较,所以你需要使用LIKE):

UPDATE [Table]
SET Col = N''
WHERE Col LIKE N'  <p><b>Can''t see your form in the list below</b></p>  ';

,将该列转换为 NVARCHAR(MAX) 以便它与 REPLACE 函数一起使用:

UPDATE [Table]
SET Col =
   REPLACE( CONVERT(NVARCHAR(MAX), Col),
            N'  <p><b>Can''t see your form in the list below</b></p>  ',
             '');

(上述查询本质上是您的第三次尝试,但嵌入的单引号已正确转义)

在这两种情况下,由于它是一个 NTEXT 字段,因此您应该在字符串文字前加上大写字母“N”以及强制转换/转换为 NVARCHAR 而不是 VARCHAR

【讨论】:

  • 我已经按照您的建议进行了尝试,我在上面的帖子中编辑了我的查询。请检查并帮助我..
  • @user3540425 :请更具体地说明什么不起作用。你得到错误或什么?我测试了我的查询,它符合预期。我什至做了一个 CONVERT(NTEXT, @NVarcharMaxVariable) 并且它按预期工作。我也没有在您的新 SET @YourModifiedText = REPLACE( 查询中看到 FROM 子句,那怎么不会出错?
  • @user3540425 :此外,您不需要将 CAST / CONVERT 转换回 NTEXT。它将隐式完成。只需使用我发布的第二个查询,就像我拥有的​​那样,它应该可以工作。无需将其分解为多个步骤。但是,如果“它不起作用”意味着它只是没有替换文本,那么这是另一个问题,需要查看列中的确切文本。可能由于使用SELECT @YourOriginalText 而不是PRINT @YourOriginalText 而看不到换行符?
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多