在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。在 SQL 中,可使用以下通配符:通配符描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者 [!charlist]。
mysql> select * from Personwhere City not like '%lon%';
+----+----------+-----------+----------------+----------+------+
| id | LastName | FirstName |Address
|City
| Year |
+----+----------+-----------+----------------+----------+------+
|
3 |Bush
| George
|Fifth Avenue
| NEW York | 1975|
|
7 | Carter
|Fred
| Changan Street | Beijing
| 1980 |
+----+----------+-----------+----------------+----------+------+
但是当你使用[charlist]来模糊搜索的时候,你会发现你很有可能查不到你想要的结果:
其实,当你想要用[charset]这种模式来搜索的时候应该把like关键字换成regexp关键字,因为由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOTREGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
mysql> select * from Person where City REGEXP '[L]';
+----+----------+-----------+--------------+--------+------+
| id | LastName | FirstName |Address
| City
| Year |
+----+----------+-----------+--------------+--------+------+
| 1 |Adams
|John
|abc
| London | 1970 |
| 2 |sam
|John
| OXfordStreet | London | 1970 |
| 4 |Fred
|John
| OXfordStreet | London | 1970 |
| 6 |Adams
|John
| OXfordStreet | London | 1970 |
+----+----------+-----------+--------------+--------+------+
4 rows in set (0.03 sec)
+----+----------+-----------+----------------+----------+------+
| id | LastName | FirstName |Address
+----+----------+-----------+----------------+----------+------+
|
|
+----+----------+-----------+----------------+----------+------+
但是当你使用[charlist]来模糊搜索的时候,你会发现你很有可能查不到你想要的结果:
其实,当你想要用[charset]这种模式来搜索的时候应该把like关键字换成regexp关键字,因为由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOTREGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
mysql> select * from Person where City REGEXP '[L]';
+----+----------+-----------+--------------+--------+------+
| id | LastName | FirstName |Address
+----+----------+-----------+--------------+--------+------+
|
|
|
|
+----+----------+-----------+--------------+--------+------+
4 rows in set (0.03 sec)