【问题标题】:Is there an infinity or wild card for use of BETWEEN ranges with MySQL?在 MySQL 中使用 BETWEEN 范围是否有无穷大或通配符?
【发布时间】:2012-09-27 21:01:28
【问题描述】:

我有一个程序,例如,我在其中接受范围为 1 到 100 的 MySQL 查询的输入。用户可以从网页中选择一个范围以使查询介于 100 和(无论无穷大)之间。除非必须,否则我不想仅仅为了无限选择而更改 MySQL 查询。 100 和 * 之间是否存在?如果是这样,语法是什么?谢谢!

【问题讨论】:

  • 你可以达到4294967295,最大无符号整数值。

标签: mysql


【解决方案1】:

我建议使用这个 当 lower == null 时,它将被 0 替换,当 upper 为 null 时,它将被替换为 max bigint

SELECT * FROM `mytable` WHERE 50 between ifnull(lower,0) and ifnull(upper,~0)

【讨论】:

    【解决方案2】:

    不,没有办法在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多