类别:

条件表达式函数

[ NOT ] BETWEEN

当输入表达式(数值或字符串)在指定的下限和上限范围内时,返回 TRUE

语法

<expr> [ NOT ] BETWEEN <lower_bound> AND <upper_bound>
Copy

实参

expr

输入表达式。

lower_bound

下限。

upper_bound

上限。

返回

该函数返回 BOOLEAN 类型的值。

使用说明

  • expr BETWEEN lower_bound AND upper_bound 等效于:samp:{expr} >= {lower_bound} AND {expr} <= {upper_bound}

  • 指定的上限必须大于下限。

  • 实参值的数据类型必须相同或 兼容

    如果该函数隐式地将值转换为不同的数据类型,则可能会返回意想不到的结果。

    例如,当 expr 为 TIMESTAMP 值,lower_boundupper_bound 值为 DATE 值时,DATE 值被隐式转换为 TIMESTAMP 值,时间设置为 00:00:00。对于以下 WHERE 子句,假设 timestamp_column 是表中类型为 TIMESTAMP 的列:

    WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-04-31'
    
    Copy

    当 DATE 值被隐式转换时,WHERE 子句解读如下:

    WHERE timestamp_column BETWEEN '2025-04-30 00:00:00' AND '2025-04-31 00:00:00'
    
    Copy

    使用此 WHERE 子句,该函数将在 2025 年 4 月 31 日几乎为所有 timestamp_column 值返回 FALSE,这可能不是预期结果。为避免此特定问题,您可以指定调用函数时间 upper_bound 的第二天:

    WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-05-01'
    
    Copy

排序规则详细信息

表达式 A BETWEEN X AND Y 等效于 A >= X AND A <= Y。用于比较 XY 的排序规则是独立的,不需要完全相同,但两者都需要与 A 的排序规则兼容。

示例

下列是将 BETWEEN 与数值和字符串值结合使用的几个简单示例:

SELECT 'true' WHERE 1 BETWEEN 0 AND 10;
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+
SELECT 'true' WHERE 1.35 BETWEEN 1 AND 2;
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+
SELECT 'true' WHERE 'the' BETWEEN 'that' AND 'then';
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+

以下示例将 COLLATE 与 BETWEEN 结合使用:

SELECT 'm' BETWEEN COLLATE('A', 'lower') AND COLLATE('Z', 'lower');
Copy
+-------------------------------------------------------------+
| 'M' BETWEEN COLLATE('A', 'LOWER') AND COLLATE('Z', 'LOWER') |
|-------------------------------------------------------------|
| True                                                        |
+-------------------------------------------------------------+
SELECT COLLATE('m', 'upper') BETWEEN 'A' AND 'Z';
Copy
+-------------------------------------------+
| COLLATE('M', 'UPPER') BETWEEN 'A' AND 'Z' |
|-------------------------------------------|
| True                                      |
+-------------------------------------------+
语言: 中文