Categorias:

Funções de expressão condicional

[ NOT ] BETWEEN

Retorna TRUE quando a expressão de entrada (numérica ou cadeia de caracteres) estiver dentro dos limites inferior e superior especificados.

Sintaxe

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

Argumentos

expr

A expressão de entrada.

lower_bound

O limite inferior.

upper_bound

O limite superior.

Retornos

A função retorna um valor do tipo BOOLEAN.

Notas de uso

  • expr BETWEEN lower_bound AND upper_bound é equivalente a expr >= lower_bound AND expr <= upper_bound.

  • O limite superior especificado deve ser maior que o limite inferior.

  • Os tipos de dados dos valores dos argumentos devem ser os mesmos ou compatíveis.

    Se a função converter implicitamente um valor em um tipo de dados diferente, ela poderá retornar resultados inesperados.

    Por exemplo, quando expr é um valor TIMESTAMP e os valores lower_bound e upper_bound são valores DATE, os valores DATE são implicitamente convertidos em valores TIMESTAMP e a hora é definida como 00:00:00. Para a cláusula WHERE a seguir, suponha que timestamp_column seja uma coluna do tipo TIMESTAMP em uma tabela:

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

    Quando os valores de DATE são implicitamente convertidos, a cláusula WHERE é interpretada da seguinte forma:

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

    Com essa cláusula WHERE, a função retorna FALSE para praticamente todos os valores de timestamp_column em 31/04/2025, o que pode não ser o pretendido. Para evitar esse problema específico, você pode especificar o dia seguinte para upper_bound quando chamar a função:

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

Detalhes do agrupamento

A expressão A BETWEEN X AND Y é equivalente a A >= X AND A <= Y. Os agrupamentos usados para comparação com X e Y são independentes e não precisam ser idênticos, mas ambos precisam ser compatíveis com o agrupamento de A.

Exemplos

Aqui estão alguns exemplos simples de utilização de BETWEEN com valores numéricos e cadeia de caracteres:

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   |
+--------+

Os exemplos a seguir usam COLLATE com 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                                      |
+-------------------------------------------+