对于 mysql "between" 运算符,前后值是否必须按数字顺序排列?
喜欢:
BETWEEN -10 AND 10
BETWEEN 10 AND -10
这两种方法都有效还是仅第一种方法?
另外,我可以做:
WHERE thing<10 AND thing>-10
这会起作用还是我必须在两者之间使用?
最后,我可以做:
WHERE -10<thing<10
?
BETWEEN -10 AND 10
这将匹配从 -10
到 10
的任何值,包括边界。
BETWEEN 10 AND -10
这永远不会与任何东西相匹配。
WHERE thing<10 AND thing>-10
这将匹配从 -10
到 10
的任何值,排除边界。
此外,如果thing
是非确定性表达式,则在BETWEEN
的情况下计算一次,在双重不等式的情况下计算两次:
SELECT COUNT(*)
FROM million_records
WHERE RAND() BETWEEN 0.6 AND 0.8;
将返回一个大约 200,000
的值;
SELECT COUNT(*)
FROM million_records
WHERE RAND() >= 0.6 AND RAND() <= 0.8;
将返回一个大约 320,000
最小值必须位于最大值之前。另请注意,终点包括在内,因此 BETWEEN 等效于:
WHERE thing>=-10 AND thing<=10
请保持每个帖子一个问题。无论如何:
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between
介于最小值和最大值之间,按此顺序排列。
从链接:
这等效于表达式(最小值 <= expr 和 expr <= 最大值(,如果 所有参数都属于同一类型
当然,第二种选择也行得通。
第一个问题:
Will both of these work or just the first one?
是的,这两个都有效
第二个问题:
Will that work or do I have to use between?
它也是有效的,但正如你所看到的只是空的结果
是的,您的 between 必须是为了返回例外结果。
假设您有一个表,其中包含一行名为 mynumber,其中包含 10 行:
MyNumber
--------
1
2
3
4
5
6
7
8
9
10
所以
select * from thistable table where table.myNumber BETWEEN 1 and 5
会回来
1
2
3
4
5
但
select * from thistable table where table.myNumber BETWEEN 5 and 1
什么也不返回。
你的第二个问题:是的,这是一回事。 但请注意,在您的示例中,您必须将 <= 和>= 与两者相同。 如果没有,在我们的示例中,您将获得
2
3
4
希望对你有帮助
我已经看到这样的东西适用于整数: 其中 -10
但最好避免它。一个原因是它似乎不适用于其他类型的。MySQL不会发出任何警告。我已经尝试过日期时间列,结果是错误的。
我的请求看起来像这样:
选择*从FACT__MODULATION_CONSTRAINTS约束其中约束。START_VALIDITY<= now(( <约束。END_VALIDITY>
结果并不如预期。我得到的结果是具有两个不等式的相同请求的两倍(返回正确的结果(。只有表达式的第一部分计算正确。