搜索" ["或"]"使用SQL命令在表中

时间:2011-11-28 01:28:58

标签: asp.net sql sql-server-2005

在SQL表中,我有以下列

id, title, content

我想在标题或内容中搜索“ [”或“] ”。

获取此类数据的SQL命令是什么?

(编辑:删除“高效”)

(添加) 根据“rsbarro”

我试过了,我的发现是:

如果我尝试

SELECT * FROM MyTable WHERE Title LIKE '%[%'

返回0行。

如果我尝试

SELECT * FROM MyTable WHERE Title LIKE '%]%' 

返回行数。

3 个答案:

答案 0 :(得分:4)

尝试使用LIKE运算符,但请记住,如果您正在搜索[,则需要将其作为[[]进行转义(有关转义的说明,请参阅@ billinkc的答案,或者检查MSDN documentation并查找“使用通配符作为文字”部分。声明:

SELECT * FROM MyTable WHERE Title LIKE '%[[]%'

将在MyTable中搜索Title包含[的任何记录。 %是一个通配符。

我不确定你要找的是什么,但如果你想搜索包含两个括号的标题(即'?? [match] ??'),请尝试:

SELECT * FROM MyTable WHERE Title LIKE '%[[]%]%'

修改
如果您尝试匹配标题或内容中的[或],则查询将为:

SELECT * FROM MyTable 
WHERE 
      Content LIKE '%[[]%' OR Content LIKE '%]%' OR
      Title LIKE '%[[]%' OR Title LIKE '%]%'

如果你有一个包含大量行的表,那么这个查询可能效率不高。

答案 1 :(得分:3)

上述示例因匹配错误而失败,因为LIKE为[]提供单个字符匹配选项。

Any single character within the specified range ([a-f]) or set ([abcdef]).

要实际匹配[,您需要将其嵌入一对括号

;
WITH DEMO (Title) AS
(
    SELECT 'Where are you [ I am here]'
    UNION ALL SELECT 'WHO ARE YOU'
    UNION ALL SELECT 'asdafasfa][asdfadfasdfasdfa'
)
SELECT 
    D.* 
FROM 
    DEMO D 
WHERE 
    D.Title LIKE '%[[]%' 
    OR D.Title LIKE '%[]]%'

返回

Where are you [ I am here]
asdafasfa][asdfadfasdfasdfa

答案 2 :(得分:2)

在Sql [中是一个特殊字符,其中[[]表示[,因此下面的Sql查询将相应地起作用。

SELECT * FROM MyTable WHERE (Title LIKE '%[[]%' OR content LIKE '%[[]%')
                          OR (Title LIKE '%]%' OR content LIKE '%]%')

有关详细信息,请参阅here