语法
expr LIKE pat [ESCAPE 'escape_char']
说明
使用一个SQL模式进行模式匹配。返回1(TRUE)或0(FALSE)。如果expr或pat是NULL,结果是NULL。
模式不需要是一个字面字符串。例如,它可以被指定为一个字符串表达式或表列。在后一种情况下,该列必须被定义为MySQL字符串类型之一。
根据SQL标准,LIKE在每个字符的基础上进行匹配,因此它可以产生与“=”比较运算符不同的结果。参考下面的示例。
mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+
特别要注意的是,在LIKE中尾部的空格总是有意义的。这与用=操作符进行的比较不同,在非二进制字符串(CHAR、VARCHAR和TEXT值)中,尾部空格的重要性取决于用于比较的排序的pad属性。
使用LIKE,你可以在模式中使用以下两个通配符。
- %匹配任何数量的字符,甚至是零字符。
- _ 准确匹配一个字符。
mysql> SELECT 'www.02405.com!' LIKE 'www.02405.com_';
-> 1
mysql> SELECT 'https://www.02405.com!' LIKE '%www.02405.com%';
-> 1
如果要匹配含有通配符的文字实例,请在它前面加上转义字符。如果你没有指定ESCAPE字符,就会假定为\,除非启用了NO_BACKSLASH_ESCAPES SQL模式。在这种情况下,不会使用转义字符。
- \%匹配一个%字符。
- \匹配一个_字符。
mysql> SELECT 'David!' LIKE 'David\_';
-> 0
mysql> SELECT 'David_' LIKE 'David\_';
-> 1
要指定一个不同的转义字符,请使用ESCAPE子句。
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
转义序列应该是一个长的字符来指定转义字符,或者是空的来指定不使用转义字符。这个表达式在执行时必须评估为一个常数。如果启用了NO_BACKSLASH_ESCAPES SQL模式,序列不能为空。
下面的语句说明了字符串比较是不区分大小写的,除非其中一个操作数是区分大小写的(使用区分大小写的整理方式或者是二进制字符串)。
mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE _utf8mb4 'ABC' COLLATE utf8mb4_0900_as_cs;
-> 0
mysql> SELECT 'abc' LIKE _utf8mb4 'ABC' COLLATE utf8mb4_bin;
-> 0
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0
作为标准SQL的扩展,MySQL允许对数字表达式进行LIKE。
mysql> SELECT 10 LIKE '1%';
-> 1
MySQL在字符串中使用C转义语法(例如,用\n表示换行字符)。如果你想让一个LIKE字符串包含一个字面的\,你必须把它加倍。(除非启用NO_BACKSLASH_ESCAPES SQL模式,在这种情况下不使用转义字符)。例如,要搜索\n,指定为\n。如果要搜索 \,则指定为 \\;这是因为反斜线会被解析器剥离一次,并且在模式匹配时再次剥离,只留下一个反斜线进行匹配。
异常情况。在模式字符串的末尾,反斜杠可以被指定为\。在字符串的末尾,反斜线代表自己,因为后面没有任何东西可以转义。假设一个表包含以下数值。