【发布时间】:2012-09-27 21:01:28
【问题描述】:
我有一个程序,例如,我在其中接受范围为 1 到 100 的 MySQL 查询的输入。用户可以从网页中选择一个范围以使查询介于 100 和(无论无穷大)之间。除非必须,否则我不想仅仅为了无限选择而更改 MySQL 查询。 100 和 * 之间是否存在?如果是这样,语法是什么?谢谢!
【问题讨论】:
-
你可以达到
4294967295,最大无符号整数值。
标签: mysql
我有一个程序,例如,我在其中接受范围为 1 到 100 的 MySQL 查询的输入。用户可以从网页中选择一个范围以使查询介于 100 和(无论无穷大)之间。除非必须,否则我不想仅仅为了无限选择而更改 MySQL 查询。 100 和 * 之间是否存在?如果是这样,语法是什么?谢谢!
【问题讨论】:
4294967295,最大无符号整数值。
标签: mysql
我建议使用这个 当 lower == null 时,它将被 0 替换,当 upper 为 null 时,它将被替换为 max bigint
SELECT * FROM `mytable` WHERE 50 between ifnull(lower,0) and ifnull(upper,~0)
【讨论】:
不,没有办法在 BETWEEN 子句中使用通配符。但是您可以使用该类型的最小/最大可能值,这将达到相同的效果。
例如,如果您有一个类型为 BIGINT(有符号)的列,那么您可以使用 9223372036854775807 作为上限,因为这是该数据类型可能的最大值。
WHERE x BETWEEN 100 AND 9223372036854775807
列出了整数值的限制here。
另一个明显的解决方案是使用>= 或<= 而不是BETWEEN 当其中一个端点是无限的。但正如你所说,这需要更改查询。
WHERE x >= 100
还有一些方法可以避免更改查询,方法是使用更复杂的查询并在您的意思是无限时提供 NULL。
WHERE (x >= @lowerbound OR @lowerbound IS NULL)
AND (x <= @upperbound OR @upperbound IS NULL)
【讨论】: