MySQL比较和'%'

时间:2009-09-01 03:43:15

标签: mysql comparison

Will the following query evaluate to true (1), false (0), or NULL?

SELECT '%' LIKE ' % ';

提供的答案是

The '%' character is matched by '%', but not by the space characters surrounding it, so the expression evaluates to false.

+----------------+
| '%' LIKE ' % ' |
+----------------+
|            0  |
+----------------+

但我认为%可以匹配零或更多字符?所以%可以匹配%+空格?或者字符是否包含通配符?

更新

哦,但如果比较发生了另一种方式,那就是真的......嗯...

SELECT ' % ' LIKE '%';
Any non-NULL string is matched by the '%' metacharacter, so the expression evaluates to true.

+----------------+
| ' % ' LIKE '%' |
+----------------+
|          1    |
+----------------+

2 个答案:

答案 0 :(得分:2)

逻辑是错误的。你必须写

select ' % ' like '%'

如果你写的是'%',那就意味着第一个字符串必须是空格,然后是最后的任何符号和一个空格。通配符用于类似语句,在第一个字符串中它不是通配符而是符号。

答案 1 :(得分:0)

不完全确定您的问题是什么,但示例时间:

示例表mytbl

col1
----
abc
def
feh
zba
a b

Query1
------
select * from mytbl where col1 like '%b%'

Result1
-------
abc
zba
a b

Query2
------
select * from mytbl where col1 like '%b'

Result2
------
a b

Query3
------
select * from mytbl where col1 like 'a%'

Result3
-------
abc
a b

Query4
------
select * from mytbl where col1 like '% b%'

Result4
-------
a b

Query5
------
select * from mytbl where col1 like '% b %'

Result5
-------
null

如您所见,%匹配零个或多个字符。非%个字符被视为文字。这意味着% b %正在寻找anything + space + b + space + anything

希望这有帮助。