例如,我有一个程序,我在其中接受范围为 1 到 100 的 MySQL 查询的输入。用户可以从网页中选择一个范围以使查询介于 100 和(无论无穷大)之间。除非必须,否则我不想只为无限选择更改 MySQL 查询。100 和 * 之间是否存在?如果是这样,语法是什么?谢谢!
问问题
8437 次
2 回答
16
不,没有办法在 BETWEEN 子句中使用通配符。但是您可以使用该类型的最小/最大可能值,这将达到相同的效果。
例如,如果您有一个类型为BIGINT
(signed) 的列,那么您可以将9223372036854775807
其用作上限,因为这是该数据类型可能的最大值。
WHERE x BETWEEN 100 AND 9223372036854775807
此处列出了整数值的限制。
另一个明显的解决方案是使用>=
or<=
代替BETWEEN
当其中一个端点不受限制时。但正如你所说,这需要更改查询。
WHERE x >= 100
还有一些方法可以避免更改查询,方法是使用更复杂的查询并在您的意思是无限时提供 NULL。
WHERE (x >= @lowerbound OR @lowerbound IS NULL)
AND (x <= @upperbound OR @upperbound IS NULL)
于 2012-10-07T09:42:55.613 回答
1
我建议在 lower == null 时使用它,然后它将被 0 替换,当 upper 为 null 时,它将被 max bigint 替换
SELECT * FROM `mytable` WHERE 50 between ifnull(lower,0) and ifnull(upper,~0)
于 2019-03-06T09:13:13.180 回答