如何将 BETWEEN 条件与多个 LIKE 表达式组合起来?

问题描述 投票: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;

仍然返回低于 15.99 的数据。 See results.

尝试寻找其他方法来使用

LIKE
IN
而不是
OR
。也许这就是问题所在,但我看到一篇文章说
IN
不能与
LIKE
一起使用。

sql postgresql pattern-matching sql-like
1个回答
4
投票

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

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.