【问题标题】:Ways to escape single quotes in SQL 'LIKE' command在 SQL 'LIKE' 命令中转义单引号的方法
【发布时间】:2011-03-31 01:55:52
【问题描述】:

在 SQL LIKE 命令中转义单引号(')的各种方法是什么?

一种方法是在必须转义单引号时加上两个单引号。

你们能提出一些建议吗?

数据库:SQL Server 2005 和 Oracle 10g

【问题讨论】:

    标签: sql sql-server-2005 mysql oracle10g


    【解决方案1】:

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

    select * from table where field like '%''something''%'
    

    【讨论】:

      【解决方案2】:

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

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

      UPDATE Employee SET LastName = 'O' +  CHAR(39) + 'Brien' 
      WHERE ID=1;
      

      【讨论】:

        【解决方案3】:

        最好的方法是将参数与 ADO 或 ADO.NET 绑定。

        喜欢(在 C# 中使用 ADO.NET 的示例):

        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】:

          还有“Q-quote”方法:

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

          这从 Oracle 10.2 开始可用。

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

          在像上面这样的简单示例中,我可能不会这样做。我只是将单引号加倍,但在构建包含大量字符串文字的大型动态 SQL 语句时确实会派上用场。

          【讨论】:

          • 这不是只适用于 PL/SQL 块吗?我想我们不能在纯 SQL 中使用它。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-24
          • 1970-01-01
          • 2013-03-12
          • 1970-01-01
          • 1970-01-01
          • 2018-06-08
          • 1970-01-01
          相关资源
          最近更新 更多