sql - 如果我在 LIKE 之前的字符串中放置通配符,而不是在 LIKE 之后的字符串中放置通配符,为什么会得到不同的结果

标签 sql postgresql

我在 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/

相关文章:

php - 使用 mysql if 语句更改按钮按下时的值

sql - 哪种数据类型应该用于货币?

postgresql - 仅对支持类型的列执行 LIKE 操作

mysql - 在MySQL中选择不包含某列的表

php - 来自数据库的sql查询

mysql - SQL 查询中的案例?

sql - 原始 SQL 中的主键要求使 Django 中的查询复杂化

sql - In out 参数在 Mysql 中无法正常工作

sql - 获取有效的日期范围。最小值和最大值

postgresql - 在 Postgresql 存储过程中使用准备好的语句或动态命令?