我在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
答案 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名称]