- Categorias:
[ 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>
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 aexpr >= 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 valoreslower_bound
eupper_bound
são valores DATE, os valores DATE são implicitamente convertidos em valores TIMESTAMP e a hora é definida como00:00:00
. Para a cláusula WHERE a seguir, suponha quetimestamp_column
seja uma coluna do tipo TIMESTAMP em uma tabela:WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-04-31'
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'
Com essa cláusula WHERE, a função retorna
FALSE
para praticamente todos os valores detimestamp_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 paraupper_bound
quando chamar a função:WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-05-01'
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;
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
SELECT 'true' WHERE 1.35 BETWEEN 1 AND 2;
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
SELECT 'true' WHERE 'the' BETWEEN 'that' AND 'then';
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
Os exemplos a seguir usam COLLATE com 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 |
+-------------------------------------------+