如果我们要查询数据库中,某个字段含有一些文字,例如查名字的时候,查询开头含有某些姓氏的人,或者查询以某些符号结尾的文字,都可以用模糊匹配来查询字段,WHERE
子句+LIKE
的操作符搜索。
以下是一些使用示例:
1. 基本模糊匹配&转义通配符的处理
使用%
作为通配符来匹配任意数量的字符。
SELECT * FROM table_name WHERE column_name LIKE 'pattern%';
这将选择column_name
中以"pattern"开头的所有行。
如果是筛选网址的时候,例如未处理的网址是长这样:
//mp.csdn.net
因为上面有转义通配符,会给如果用上面的查询会跳出报错:
“1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘like ‘/%’’ at line 1”
这时候要用反转义符的写法就能解决这个问题啦:
SELECT net FROM table_name WHERE net LIKE '\/%'
其他转义通配符的处理
如果模式中包含通配符字符(%
或_
),也可以使用ESCAPE
子句来转义它们。
SELECT * FROM table_name WHERE column_name LIKE 'p\%attern%' ESCAPE '\';
这将搜索column_name
中包含"p%attern"的行,其中%
被视为文字字符而不是通配符。
2. 任意位置的匹配
使用%
通配符可以在模式的任何位置使用,包括中间和末尾。
SELECT * FROM table_name WHERE column_name LIKE '%pattern%';
这将选择column_name
中包含"pattern"的所有行。
3. 多个筛选条件的匹配查询
可以结合使用AND
或OR
来匹配多个模式。
SELECT * FROM table_name WHERE column_name LIKE 'pattern1%' OR column_name LIKE '%pattern2';
这将选择column_name
中以"pattern1"开头或包含"pattern2"的所有行。
4. 单字符的匹配,可以匹配中间的字段
如果是类似查询 “李X明” 这样的名字的格式的时候,可以用这种方法:
使用_
(下划线)作为通配符来匹配任意单个字符。
SELECT * FROM table_name WHERE column_name LIKE 'p_ttern%';
这将选择column_name
中第四个字符是任意字符,且以"p"开头并以"tern"结尾的所有行。
5. 使用NOT进行否定匹配
如果需要查询网址,类似除了“http” 、“www.”开头的其他网址的格式,可以使用这种:
使用NOT LIKE
或LIKE ... ESCAPE
来进行否定的模糊匹配。
SELECT * FROM table_name WHERE column_name NOT LIKE 'pattern%';
这将选择column_name
中不以"pattern"开头的所有行。
6. ILIKE(不区分大小写的LIKE)
在某些数据库系统中(如PostgreSQL),可以使用ILIKE
来进行不区分大小写的模糊匹配。
SELECT * FROM table_name WHERE column_name ILIKE 'PATTERN%';