- 类别:
[ NOT ] BETWEEN¶
当输入表达式(数值或字符串)在指定的下限和上限范围内时,返回 TRUE
。
语法¶
<expr> [ NOT ] BETWEEN <lower_bound> AND <upper_bound>
实参¶
expr
输入表达式。
lower_bound
下限。
upper_bound
上限。
返回¶
该函数返回 BOOLEAN 类型的值。
使用说明¶
expr BETWEEN lower_bound AND upper_bound
等效于:samp:{expr} >= {lower_bound} AND {expr} <= {upper_bound}
。指定的上限必须大于下限。
实参值的数据类型必须相同或 兼容。
如果该函数隐式地将值转换为不同的数据类型,则可能会返回意想不到的结果。
例如,当
expr
为 TIMESTAMP 值,lower_bound
和upper_bound
值为 DATE 值时,DATE 值被隐式转换为 TIMESTAMP 值,时间设置为00:00:00
。对于以下 WHERE 子句,假设timestamp_column
是表中类型为 TIMESTAMP 的列:WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-04-31'
当 DATE 值被隐式转换时,WHERE 子句解读如下:
WHERE timestamp_column BETWEEN '2025-04-30 00:00:00' AND '2025-04-31 00:00:00'
使用此 WHERE 子句,该函数将在 2025 年 4 月 31 日几乎为所有
timestamp_column
值返回FALSE
,这可能不是预期结果。为避免此特定问题,您可以指定调用函数时间upper_bound
的第二天:WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-05-01'
排序规则详细信息¶
表达式 A BETWEEN X AND Y
等效于 A >= X AND A <= Y
。用于比较 X
和 Y
的排序规则是独立的,不需要完全相同,但两者都需要与 A
的排序规则兼容。
示例¶
下列是将 BETWEEN 与数值和字符串值结合使用的几个简单示例:
SELECT 'true' WHERE 1 BETWEEN 0 AND 10;
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
SELECT 'true' WHERE 1.35 BETWEEN 1 AND 2;
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
SELECT 'true' WHERE 'the' BETWEEN 'that' AND 'then';
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
以下示例将 COLLATE 与 BETWEEN 结合使用:
SELECT 'm' BETWEEN COLLATE('A', 'lower') AND COLLATE('Z', 'lower');
+-------------------------------------------------------------+
| 'M' BETWEEN COLLATE('A', 'LOWER') AND COLLATE('Z', 'LOWER') |
|-------------------------------------------------------------|
| True |
+-------------------------------------------------------------+
SELECT COLLATE('m', 'upper') BETWEEN 'A' AND 'Z';
+-------------------------------------------+
| COLLATE('M', 'UPPER') BETWEEN 'A' AND 'Z' |
|-------------------------------------------|
| True |
+-------------------------------------------+