我在 PostgreSQL 中运行了这两个查询并得到了不同的结果。我想知道是否有人可以解释原因。这在 MicrosoftSQL、MySQL 和其他数据库中是否相同?
select 'teststring%' like 'teststring'; --returns False
select 'teststring' like 'teststring%'; --returns True
最佳答案
因为'teststring%'
其实并不像'teststring'
。
但是'teststring'
就像'teststring%'
。
这应该发生在每个数据库中。
LIKE
运算符不可交换。如果右侧字符串没有通配符(& 符号或下划线),它的行为类似于 =
(作为副作用)。
LIKE
的算法以这种方式处理右侧:
- %:匹配任意数量的任意字符(不能匹配一个);
- _:匹配任何字符(不多也不少),但恰好是一个;
- 任何其他字符:仅匹配该字符。
左边的字符串对任何字符都没有特殊意义。
关于sql - 如果我在 LIKE 之前的字符串中放置通配符,而不是在 LIKE 之后的字符串中放置通配符,为什么会得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058122/