SQL Like Clause with escape single quote

时间:2012-06-29 17:04:16

标签: sql sql-server-2008 escaping

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

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

我有restaurantName列,价值为xyz Restaurant

以下是一些示例数据

2 个答案:

答案 0 :(得分:4)

为什么要使用额外的单引号?

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

您似乎正在尝试动态构建它;如果是这样,那么我建议您发布如何构建它。

答案 1 :(得分:2)

当执行字符串连接时,您使用的是将结果与以下内容进行比较:

'%Guu%'

当您在SQL字符串中依次放置两个单引号字符时,它会被“转义”,因此''将用作'。如果您的数据集包含引号字符,您将匹配以下内容:

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

我相信你想要这样做:

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

哪匹配

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

或者,如果你只是在没有任何引号的情况下寻找Guu,那就去做吧

'%' + 'Guu' + '%'

哪匹配

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