如何在多个 LIKE 语句上设置 BETWEEN 条件?

问题描述 投票:0回答:1

我正在尝试提供以字母“S”和“T”开头的电影标题,其重置成本为 15.99 至 20.99。

我尝试使用此代码,但它仍然返回一些低于 15.99 的数据,请帮助。

SELECT title,length,replacement_cost FROM film WHERE title LIKE 'S%' OR title LIKE 'T%' AND replacement_cost BETWEEN 15.99 AND 20.99

Here's the result of running the code, still returns data lower than 15.99

尝试寻找其他方法将 LIKE 与 IN 一起使用,或者也许这就是问题所在,但我看到一篇文章说 IN 不能与 LIKE 一起使用。

postgresql pgadmin-4
1个回答
2
投票

您当前的问题是运算符优先级

AND
OR
之前绑定 - 正如已评论的那样。可以用括号固定

SELECT title, length, replacement_cost
FROM   film
WHERE (title LIKE 'S%' OR title LIKE 'T%')
AND    replacement_cost BETWEEN 15.99 AND 20.99

但是你可以简化。那么你就不需要

OR
,因此也不需要括号:

...
WHERE  title LIKE ANY ('{S%, T%}')

虽然您只匹配前缀,但 运算符

^@
更好。需要 Postgres 11; Postgres 15 有了很大改进:

...
WHERE  title ^@ ANY ('{S,T}')

参见:

© www.soinside.com 2019 - 2024. All rights reserved.