代码之家  ›  专栏  ›  技术社区  ›  Egalitarian

在sql“like”命令中转义单引号的方法

  •  5
  • Egalitarian  · 技术社区  · 14 年前

    在sql中,有哪些方法可以转义单引号(') LIKE 命令?

    一种方法是,每当你必须转义一个单引号时,就放两个单引号。

    你们有什么建议吗?

    数据库: SQL Server 2005 和Oracle 10g

    4 回复  |  直到 8 年前
        1
  •  12
  •   Justin Niessner    14 年前

    你已经有答案了。必须使用两个单引号:

    select * from table where field like '%''something''%'
    
        2
  •  2
  •   p.campbell    14 年前

    两个单引号是最好的解决方案。

    或者,您可以使用 CHAR(39) 表示单引号字符。

    UPDATE Employee SET LastName = 'O' +  CHAR(39) + 'Brien' 
    WHERE ID=1;
    
        3
  •  2
  •   Peter Mortensen mkoryak    8 年前

    最好的方法是用ado或ado.net绑定参数。

    例如(使用ado.net的c中的示例):

    SqlCommand x = new SqlCommand(sqlConnection, @"select * from table where col like '%'+@para1+'%'");
    x.parameters.add(new SqlParameter("@para1",sqltype.varchar,100)).value = "this is a' test";
    

    SQL Server 2005 如果不希望绑定,则使用双单引号('')转义单引号('):

    select * from table where col like '%this is a'' test%'
    
        4
  •  1
  •   Peter Mortensen mkoryak    8 年前

    还有“q-quote”方法:

    select * from mytable where text like q'#%Here's some text%#';
    

    这是从Oracle 10.2开始提供的。

    我使用了一个“”字符作为引号分隔符,但是您可以使用几乎任何不会出现在字符串中的字符(有一些例外,例如空格字符)。

    在上面这样一个简单的例子中,我可能不会这样做。我只需要将单引号加倍,但是在构建包含大量字符串文本的大型动态sql语句时,它确实很有用。