在SQL表中,我有以下列
id, title, content
我想在标题或内容中搜索“ [”或“] ”。
获取此类数据的SQL命令是什么?
(编辑:删除“高效”)
(添加) 根据“rsbarro”
我试过了,我的发现是:
如果我尝试
SELECT * FROM MyTable WHERE Title LIKE '%[%'
返回0行。
如果我尝试
SELECT * FROM MyTable WHERE Title LIKE '%]%'
返回行数。
答案 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。