Operadores de acesso
a[N] – Acesso a um elemento de um Array. A função arrayElement(a, N).
a.N – Acesso a um elemento de uma tupla. A função tupleElement(a, N).
Operador de negação numérica
-a – A função negate(a).
Para a negação de tuplas: tupleNegate.
Operadores de Multiplicação e Divisão
a * b – A função multiply(a, b).
Para multiplicar tupla por um número: tupleMultiplyByNumber; para produto escalar: dotProduct.
a / b – A função divide(a, b).
Para dividir tupla por um número: tupleDivideByNumber.
a % b – A função modulo(a, b).
Operadores de adição e subtração
a + b – A função plus(a, b).
Para adição de tuplas: tuplePlus.
a - b – A função minus(a, b).
Para subtração de tuplas: tupleMinus.
Operadores de comparação
função equals
a = b – A função equals(a, b).
a == b – A função equals(a, b).
função notEquals
a != b – A função notEquals(a, b).
a <> b – A função notEquals(a, b).
função lessOrEquals
a <= b – a função lessOrEquals(a, b).
função greaterOrEquals
a >= b – A função greaterOrEquals(a, b).
função less
a < b – A função less(a, b).
função greater
a > b – A função greater(a, b).
função like
a LIKE b – a função like(a, b).
Função notLike
a NOT LIKE b – a função notLike(a, b).
função ilike
a ILIKE b – a função ilike(a, b).
Função BETWEEN
a BETWEEN b AND c – Equivale a a >= b AND a <= c.
a NOT BETWEEN b AND c – Equivale a a < b OR a > c.
operador is not distinct from (<=>)
A partir da versão 25.10, você pode usar
<=> da mesma forma que qualquer outro operador.
Antes da versão 25.10, ele só podia ser usado em expressões JOIN, por exemplo:<=> é o operador de igualdade compatível com NULL, equivalente a IS NOT DISTINCT FROM.
Ele funciona como o operador de igualdade comum (=), mas trata valores NULL como comparáveis.
Dois valores NULL são considerados iguais, e um NULL comparado com qualquer valor não NULL retorna 0 (falso), em vez de NULL.
Operadores para trabalhar com strings
OVERLAY
OVERLAY(string PLACING replacement FROM offset)- A funçãooverlay(string, replacement, offset).OVERLAY(string PLACING replacement FROM offset FOR length)- A funçãooverlay(string, replacement, offset, length).OVERLAYUTF8(string PLACING replacement FROM offset)- A funçãooverlayUTF8(string, replacement, offset).OVERLAYUTF8(string PLACING replacement FROM offset FOR length)- A funçãooverlayUTF8(string, replacement, offset, length).
Operadores para trabalhar com conjuntos de dados
função in
a IN ... – a função in(a, b).
função notIn
a NOT IN ... – a função notIn(a, b).
função globalIn
a GLOBAL IN ... – a função globalIn(a, b).
função globalNotIn
a GLOBAL NOT IN ... – A função globalNotIn(a, b).
função in de subconsulta
a = ANY (subquery) – A função in(a, subquery).
notIn subconsulta function
a != ANY (subquery) – O mesmo que a NOT IN (SELECT singleValueOrNull(*) FROM subquery).
função in subconsulta
a = ALL (subquery) – O mesmo que a IN (SELECT singleValueOrNull(*) FROM subquery).
função de subconsulta notIn
a != ALL (subquery) – A função notIn(a, subquery).
Exemplos
Consulta com ALL:
Query
Response
Query
Response
SOME / ALL em arrays
SOME / ALL pode ser uma expressão de array (um literal de array, uma coluna do tipo array ou qualquer expressão que retorne um array). Esta é a sintaxe de quantificador de array no estilo do PostgreSQL. Ela é reconhecida durante o parse e reescrita como funções de array, portanto não é necessária nenhuma reescrita manual:
| Sintaxe | Reescrito como |
|---|---|
expr = SOME(arr) | has(arr, expr) |
expr <> ALL(arr) | NOT has(arr, expr) |
expr OP SOME(arr) (qualquer outro operador de comparação) | arrayExists(x -> expr OP x, arr) |
expr OP ALL(arr) (qualquer outro operador de comparação) | arrayAll(x -> expr OP x, arr) |
SOME é o quantificador existencial (o sinônimo em SQL de ANY). = e <> recebem tratamento especial e são reescritos como has / NOT has porque têm uma implementação otimizada; a forma geral recorre às funções de ordem superior arrayExists / arrayAll.
A forma com array é reconhecida apenas para os operadores de comparação =, ==, !=, <>, <=>, <, <=, >, e >=. Outros operadores que aceitam um array à direita — por exemplo, LIKE, ILIKE, NOT LIKE, REGEXP e IN — não são reescritos como quantificadores de array e mantêm seu significado normal. Por exemplo, 'abc' LIKE SOME(['a%', 'b%']) não é a sintaxe de quantificador de array; use arrayExists / arrayAll diretamente nesses casos.
ANY não tem suporte na forma com arraySomente SOME e ALL aceitam um array no lado direito. ANY foi excluído porque any também é uma função de agregação, então uma expressão no formato expr = any(x) mantém o significado de chamada de função. Use SOME para o quantificador de array.Query
Response
O tratamento de
NULL difere da forma com subconsultaComo a forma de array é reescrita no parser (onde configurações de consulta como transform_null_in não estão disponíveis, e uma coluna de array por linha não pode usar o caminho IN null-safe do analyzer), ela usa a semântica de dois valores de has (para = / <>) e arrayExists / arrayAll (que convertem um resultado desconhecido de comparação com NULL em 0). Isso pode diferir da forma com subconsulta, cujo tratamento de NULL é reduzido por meio de IN / NOT IN e depende de transform_null_in:Operadores para trabalhar com datas e horas
EXTRACT
part especifica qual parte da data deve ser recuperada. Os seguintes valores estão disponíveis:
NANOSECOND— O nanossegundo. Valores possíveis: 0–999999999.MICROSECOND— O microssegundo. Valores possíveis: 0–999999.MILLISECOND— O milissegundo. Valores possíveis: 0–999.SECOND— O segundo. Valores possíveis: 0–59.MINUTE— O minuto. Valores possíveis: 0–59.HOUR— A hora. Valores possíveis: 0–23.DAY— O dia do mês. Valores possíveis: 1–31.WEEK— O número da semana ISO 8601. Valores possíveis: 1–53.MONTH— O número do mês. Valores possíveis: 1–12.QUARTER— O trimestre. Valores possíveis: 1–4.YEAR— O ano.EPOCH— O Unix timestamp (segundos desde 1970-01-01 00:00:00 UTC). Observação: paraDateTime64, a parte fracionária dos segundos é truncada.DOW— O dia da semana (compatível com PostgreSQL). 0 = domingo, 6 = sábado.DOY— O dia do ano. Valores possíveis: 1–366.ISODOW— O dia ISO da semana. 1 = segunda-feira, 7 = domingo.ISOYEAR— O ano de numeração de semanas ISO 8601.CENTURY— O século. Por exemplo, o ano de 2024 está no século 21.DECADE— A década (ano dividido por 10). Por exemplo, o ano de 2024 tem década 202.MILLENNIUM— O milênio. Por exemplo, o ano de 2024 está no 3º milênio.TIMEZONE_HOUR— A parte da hora com sinal do deslocamento UTC do fuso horário do operando. Por exemplo,+5:30retorna5,-3:30retorna-3.TIMEZONE_MINUTE— A parte dos minutos com sinal do deslocamento UTC do fuso horário do operando. Por exemplo,+5:30retorna30,-3:30retorna-30.
part não diferencia maiúsculas de minúsculas.
O parâmetro date especifica o valor a ser processado. Os tipos Date, Date32, DateTime, DateTime64 e Interval são suportados. Quando date é um Interval, o part solicitado deve corresponder ao tipo armazenado no intervalo (por exemplo, EXTRACT(DAY FROM INTERVAL 5 DAY) é permitido; EXTRACT(HOUR FROM INTERVAL 5 DAY) é rejeitado, porque os intervalos do ClickHouse são de tipo único). O resultado para um operando Interval é Int64.
Exemplos:
DateTime.
INTERVAL
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL. Por exemplo, INTERVAL 1 HOUR é idêntico a INTERVAL '1 hour' ou INTERVAL '1' hour.
Exemplos:
A sintaxe
INTERVAL ou a função addDays devem ser sempre preferidas. A simples adição ou subtração (com sintaxe como now() + ...) não leva em conta as configurações de horário. Por exemplo, o horário de verão.- tipo de dado Interval
- toInterval funções de conversão de tipo
Adição de data e hora
+. O resultado é um DateTime ou DateTime64 que representa a data no horário informado. A operação é comutativa.
O tipo do resultado depende dos tipos dos operandos:
| Operando esquerdo | Operando direito | Tipo do resultado |
|---|---|---|
Date | Time | DateTime |
Date | Time64(s) | DateTime64(s) |
Date32 | Time | DateTime64(0) |
Date32 | Time64(s) | DateTime64(s) |
O resultado usa o fuso horário da sessão (ou o fuso horário padrão do servidor, se nenhum fuso horário da sessão estiver definido). A configuração
date_time_overflow_behavior controla o que acontece quando o resultado fica fora do intervalo representável.Operador lógico AND
SELECT a AND b — calcula a conjunção lógica entre a e b usando a função and.
Operador lógico OR
SELECT a OR b — calcula a disjunção lógica entre a e b usando a função or.
Operador de negação lógica
SELECT NOT a — calcula a negação lógica de a usando a função not.
Operador condicional
a ? b : c – A função if(a, b, c).
Observação:
O operador condicional calcula os valores de b e c, verifica se a condição a é satisfeita e, em seguida, retorna o valor correspondente. Se b ou C for a função arrayJoin(), cada linha será replicada independentemente da condição “a”.
Expressão condicional
x for especificado, será usada a função transform(x, [a, ...], [b, ...], c). Caso contrário, multiIf(a, b, ..., c).
Se não houver a cláusula ELSE c na expressão, o valor padrão será NULL.
A função transform não funciona com NULL.
Operador de concatenação
s1 || s2 – A função concat(s1, s2) function.
Operador de criação de lambda
x -> expr – a função lambda(x, expr).
Os operadores a seguir não têm prioridade, pois são parênteses:
Operador de criação de Array
[x1, ...] – A função array(x1, ...).
Operador de criação de tupla
(x1, x2, ...) – A função tuple(x2, x2, ...).
Associatividade
1 + 2 + 3 é transformado em plus(plus(1, 2), 3).
Às vezes, isso não funciona como você espera. Por exemplo, SELECT 4 > 2 > 3 resultará em 0.
Para maior eficiência, as funções and e or aceitam qualquer número de argumentos. As cadeias correspondentes de operadores AND e OR são transformadas em uma única chamada dessas funções.
Verificando NULL
IS NULL e IS NOT NULL.
IS NULL
- Para valores do tipo Nullable, o operador
IS NULLretorna:1, se o valor forNULL.0, caso contrário.
- Para outros valores, o operador
IS NULLsempre retorna0.
optimize_functions_to_subcolumns = 1, a função lê apenas a subcoluna null, em vez de ler e processar todos os dados da coluna. A consulta SELECT n IS NULL FROM table é transformada em SELECT n.null FROM TABLE.
IS NOT NULL
- Para valores do tipo Nullable, o operador
IS NOT NULLretorna:0, se o valor forNULL.1, caso contrário.
- Para outros valores, o operador
IS NOT NULLsempre retorna1.
optimize_functions_to_subcolumns = 1, a função lê apenas a subcoluna null, em vez de ler e processar todos os dados da coluna. A consulta SELECT n IS NOT NULL FROM table é transformada em SELECT NOT n.null FROM TABLE.
Verificando valores booleanos
IS TRUE, IS FALSE, IS UNKNOWN, IS NOT TRUE, IS NOT FALSE e IS NOT UNKNOWN.
Eles são usados com expressões Bool e Nullable(Bool).
expr IS TRUEretorna1somente seexprfortrue.expr IS FALSEretorna1somente seexprforfalse.expr IS UNKNOWNretorna1somente seexprforNULL.expr IS NOT TRUEretorna1seexprforfalseouNULL.expr IS NOT FALSEretorna1seexprfortrueouNULL.expr IS NOT UNKNOWNretorna1seexprnão forNULL.
IS UNKNOWN equivale a IS NULL, e IS NOT UNKNOWN equivale a IS NOT NULL.