【问题标题】:SQL Like Clause with escape single quote带有转义单引号的 SQL Like 子句
【发布时间】:2012-06-29 17:04:15
【问题描述】:

您好,我正在尝试在 SQL 中运行此查询,但它没有给出结果:

SELECT        COUNT(*) AS Expr1
FROM            restaurantData
WHERE        (restaurantInfo LIKE '''%' + 'xyz' + '%''') OR
                         (restaurantName LIKE '''%' + 'xyz' + '%''') OR
                         (restaurantDescription LIKE '''%' + 'xyz' + '%''')

我有值为 xyz 餐厅的 restaurantName 列

这是一些示例数据

【问题讨论】:

  • 为什么不只是:LIKE '%Guu%' 等?
  • 试着把它分成更小的部分,看看每个类似的行为是否符合预期?

标签: sql sql-server-2008 escaping


【解决方案1】:

为什么会有额外的单引号?

   SELECT
            COUNT(*) AS Expr1 
    FROM  restaurantData 
    WHERE        (restaurantInfo LIKE '%Guu%') 
OR (restaurantName LIKE '%Guu%') 
    OR (restaurantDescription LIKE '%Guu%')

看起来您正在尝试动态构建它;如果是这样,那么我建议您发布您的构建方式。

【讨论】:

  • 这行得通我以前从未使用过 Like 子句,所以我不知道语法
【解决方案2】:

当执行字符串连接时,这里是您用来比较结果的内容:

'%Guu%'

当你将两个单引号字符一个接一个地放在一个SQL字符串中时,它被“转义”了,所以''被用作'。如果您的数据集包含引号字符,您将匹配如下内容:

restaurantInfo 
--------------
'ABCGuuDEF'
'xyzGuuamn'

我相信你反而想做:

'%''' + 'Guu' + '''%'

哪个匹配

restaurantInfo 
--------------
Asdf'Guu'
'Guu'Asdf

或者,如果您只是在寻找没有任何引号的 Guu,就这样做

'%' + 'Guu' + '%'

哪个匹配

restaurantInfo 
--------------
Guu
GuuAbcd
AbcdGuu
Asdf'Guu'
'Guu'Asdf

【讨论】:

  • 我正在尝试在程序(SELECT COUNT(*) FROM dealData WHERE dealInfo LIKE '%' + @search_text + '%' OR dealName LIKE '%' + @search_text + '%' OR dealDescription LIKE '%' + @search_text + '%' GROUP BY dealId) 上执行此操作,它没有给我我想要的,所以我想我需要在参数@search_text 之前和之后使用单引号
  • 如果您在问题中包含一些表格中的示例数据,我们可能会更清楚。
  • 所以我不确定我应该如何为我的参数添加单引号以使其看起来像 Like %'Guu'%
  • 我的第一个建议应该可行。只需修改它,使其包含参数:'%''' + @search_text + '''%'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2012-09-26
  • 2014-05-10
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2011-01-30
相关资源
最近更新 更多