语法

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.codesou.cn!' LIKE 'www.codesou.cn_';
        -> 1
mysql> SELECT 'https://www.codesou.cn!' LIKE '%www.codesou.cn%';
        -> 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。如果要搜索 ,则指定为 \;这是因为反斜线会被解析器剥离一次,并且在模式匹配时再次剥离,只留下一个反斜线进行匹配。

异常情况。在模式字符串的末尾,反斜杠可以被指定为。在字符串的末尾,反斜线代表自己,因为后面没有任何东西可以转义。假设一个表包含以下数值。