关键字 LIKE
SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE 'jet%'
将得到任意以jet开头的prod_name。在MySQL的配置中可以设置是否区分大小写
%可以在任意位置使用并且使用多个通配符
SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE '%anvil%'
将得到任何位置包含anvil的字符
同理,还可以使用’e%s’等方式
注意:%可以表示0到多个字符,但不能匹配NULL
下划线通配符只能表示单个字符
使用方法:获得前面只有一个字符,后面为’ ton anvil’的
SELECT prod_id,prod_mane
FROM products
WHERE pro_name LIKE '_ ton anvil'
注意: _ 只能表示一个字符,不能多也不能少
关键字 REGEXP
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
得到包含1000 的输出
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
使用 . 这个字符 表示任意 字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
选择得到包含1000或者2000的输出
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
将选择1 Ton 或者2 Ton 或者3 Ton
[] 是另一种形式的OR
注意:
WHERE prod_name REGEXP '[123] Ton'
等同于
WHERE prod_name REGEXP '1 Ton|2 Ton|3 Ton'
而不是
WHERE prod_name REGEXP '1|2|3 Ton'
因为后者的意思为查找1或者2或者3 Ton
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-3] Ton'
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[a-z] Ton'
使用[ - ]表示一个范围的限定
对之前说到的 . [] | 这些特殊字符的查找,需要使用\
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\.'
得到所有包含.的prod_name
注意
\f \n 等空白元字符也用这个来表示
\\ 用来表示对\的查找
字符 | 意义 |
---|---|
* | 0个或者多个匹配 |
+ | 一个或者多个匹配 |
? | 0个或者1个匹配 |
{n} | 指定数目的匹配 |
{n,} | 不少于指定数目的匹配 |
{n,m} | 匹配数目的范围 m<255 |
例子 1
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
1、()前面的\表示查找的包含()
2、[0-9]表示这里包含一个0到9之间的数字
3、s后面的?表示s 应有0个或者1个
可以得到输出如下:
TNT (1 stick)
TNT (2 sticks)
例子 2
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[:digit:]{4}'
1、[:digit:]表示任意数字,如[0-9]
2、{4}表示前面的数字出现4次
这个 可以得到任意包含四个连续数字的prod_name
字符 | 意义 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
[[:<:]] | 词的开始 |
[[:>:]] | 词的结尾 |
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
表示从文本的最开始查找一个以.或者0到9的数字开始的prod_name
参考:
《MySQL 必知必会》