替换SQL Server中的单引号

时间:2009-09-17 19:01:20

标签: sql-server replace error-handling

我在SQL Server中使用此函数来替换单引号。

但是,当我插入单引号时,它会在Replace(@strip,''',''))上抛出错误:

Create Function [dbo].[fn_stripsingleQuote]
    (@strStrip varchar(Max))
    returns varchar
as
begin
    declare @CleanString varchar(Max)
    SET @var=(Replace(@strip,'',''))

    return @var
end

13 个答案:

答案 0 :(得分:94)

您需要将单引号加倍,如下所示:

REPLACE(@strip, '''', '')

答案 1 :(得分:23)

尝试REPLACE(@strip,'''','')

SQL使用两个引号来表示字符串中的一个。

答案 2 :(得分:16)

如果你真的必须完全删除单引号,你可以这样做:

Replace(@strip, '''', '')

但是,通常你会用'''替换'',这将使SQL Server在查询数据库时感到高兴。任何内置SQL函数(如替换)的诀窍在于它们也要求您将单引号加倍。

所以要在代码中替换'with',你会这样做:

Replace(@strip, '''', '''''')

当然......在某些情况下,如果在查询数据库时使用参数,则可以避免完全执行此操作。假设您正在从.NET应用程序查询数据库,那么您将使用SqlParameter class为查询提供SqlCommand参数,并且所有这些单引号业务都将自动处理。这通常是首选方法,因为SQL参数也有助于防止SQL injection攻击。

答案 3 :(得分:4)

您似乎正在尝试复制QUOTENAME功能。此内置函数可用于添加分隔符并正确转义字符串内的分隔符,并将单'和双"引号识别为分隔符,以及括号[和{{1 }}

答案 4 :(得分:3)

你可以使用char(39)

insert into my_table values('hi, my name'+char(39)+'s tim.')

答案 5 :(得分:2)

尝试使用单引号转义单引号:

Replace(@strip, '''', '')

答案 6 :(得分:1)

在 SQL语句到达数据库之前,必须在用户输入(input sanitation)中对单引号进行条带化/替换/删除。

答案 7 :(得分:1)

我遇到了一个奇怪的异常现象。使用Google API并以XML格式获取回复时,由于单引号,它无法转换为XML数据类型。

替换(@Strip,''''''')

无效,因为单引号是ascii字符146而不是39。 所以我用过:

替换(@Strip,char(146),'')

也适用于常规单引号char(39)和任何其他特殊字符。

答案 8 :(得分:0)

除了需要转义引号(使用双引号)之外,你还混淆了变量的名称:你使用的是@var和@strip,而不是@CleanString和@strStrip ......

答案 9 :(得分:0)

我认为这是最短的SQL语句:

CREATE FUNCTION [dbo].[fn_stripsingleQuote] (@strStrip varchar(Max))
    RETURNS varchar(Max)
AS
BEGIN    
    RETURN (Replace(@strStrip ,'''',''))
END

我希望这有帮助!

答案 10 :(得分:0)

如果使用另一个单引号转义单引号不适合您(就像我最近的一个REPLACE()查询一样),您可以在查询之前使用SET QUOTED_IDENTIFIER OFF,然后在之后使用SET QUOTED_IDENTIFIER ON

例如

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER OFF;

答案 11 :(得分:0)

尝试一下:

select replace (colname, char(39)+char(39), '') AS colname FROM .[dbo].[Db Name];

我已经达到了预期的结果。 示例:输入值-> 类似于'%Pat')''OR

      Want Output -->  *Like '%Pat') OR*

使用上述查询获得了预期的结果。

答案 12 :(得分:-1)

选择替换(colname,``'','')AS colname FROM。[dbo]。[Db名称]