- Categorias:
Funções de cadeia de caracteres e binários (Correspondência/Comparação)
[ NOT ] LIKE¶
Executa uma comparação que diferencia maiúsculas de minúsculas para determinar se uma cadeia de caracteres corresponde ou não a um padrão especificado. Para correspondência que não diferencia maiúsculas e minúsculas, use ILIKE em seu lugar.
LIKE, ILIKE e RLIKE executam operações semelhantes. No entanto, RLIKE usa sintaxe POSIX ERE (Extended Regular Expression, ou expressão regular estendida) em vez da sintaxe padrão SQL usada por LIKE e ILIKE.
Dica
Você pode usar o serviço de otimização de pesquisa para melhorar o desempenho de consultas que chamam essa função. Para obter mais detalhes, consulte Serviço de otimização de pesquisa.
- Consulte também:
Sintaxe¶
<subject> [ NOT ] LIKE <pattern> [ ESCAPE <escape> ]
LIKE( <subject> , <pattern> [ , <escape> ] )
Argumentos¶
Obrigatório:
subject
Sujeito à correspondência. Este é normalmente um VARCHAR, embora alguns outros tipos de dados possam ser usados.
pattern
Padrão a atender. Este é normalmente um VARCHAR, embora alguns outros tipos de dados possam ser usados.
Opcional:
escape
Caractere(s) inserido(s) na frente de um curinga para indicar que o curinga deve ser interpretado como um caractere normal e não como um curinga.
Retornos¶
Retorna um BOOLEAN ou NULL.
Quando LIKE é especificado, o valor será TRUE se houver uma correspondência. Caso contrário, retorna FALSE.
Quando NOT LIKE é especificado, o valor será TRUE se não houver correspondência. Caso contrário, retorna FALSE.
Quando LIKE ou NOT LIKE é especificado, retorna NULL se algum argumento for NULL.
Notas de uso¶
Curingas SQL são suportados em
pattern
:Um sublinhado (
_
) corresponde a qualquer caractere individual.Um sinal de porcentagem (
%
) corresponde a qualquer sequência de zero ou mais caracteres.
Os caracteres curinga em
pattern
incluem caracteres de nova linha (n
) emsubject
como correspondências.A correspondência de padrão LIKE cobre toda a cadeia de caracteres. Para combinar uma sequência em qualquer lugar dentro de uma cadeia de caracteres, comece e termine o padrão com
%
.NULL não é compatível com NULL. Em outras palavras, se o assunto for NULL e o padrão for NULL, isso não é considerado uma correspondência.
Não há caractere de escape padrão.
Se você usar a barra invertida como um caractere de escape, então você deve especificar a barra invertida na cláusula ESCAPE. Por exemplo, o comando a seguir especifica que o caractere de escape é a barra invertida, e então usa esse caractere de escape para procurar por ‘%’ como um literal (sem o caractere de escape, o ‘%’ seria tratado como um curinga):
'SOMETHING%' LIKE '%\\%%' ESCAPE '\\';
Para exemplos de uso de caracteres de escape, e em particular a barra invertida como um caractere de escape, consulte Exemplos.
Detalhes do agrupamento¶
Somente as especificações de agrupamento upper
, lower
e trim
são suportadas. Combinações com upper
, lower
e trim
também são suportadas (por exemplo, upper-trim
e lower-trim
), exceto para combinações de localidade (por exemplo, en-upper
).
Nota
Para usar esta função com uma coluna que tenha os especificadores de agrupamento upper
, lower
ou trim
, você deve ativar o pacote de mudança de comportamento 2024_02 em sua conta.
Para ativar este pacote em sua conta, execute a seguinte instrução:
SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Exemplos¶
Os exemplos seguintes mostram o uso de LIKE
, NOT LIKE
e o caractere curinga %
:
CREATE OR REPLACE TABLE like_ex(name VARCHAR(20)); INSERT INTO like_ex VALUES ('John Dddoe'), ('Joe Doe'), ('John_down'), ('Joe down'), ('Elaine'), (''), -- empty string (null);SELECT name FROM like_ex WHERE name LIKE '%Jo%oe%' ORDER BY name;+-------------+ | NAME | |-------------| | Joe Doe | | John Dddoe | +-------------+SELECT name FROM like_ex WHERE name NOT LIKE '%Jo%oe%' ORDER BY name;+-----------+ | NAME | |-----------| | | | Elaine | | Joe down | | John_down | +-----------+SELECT name FROM like_ex WHERE name LIKE '%J%h%^_do%' ESCAPE '^' ORDER BY name;+-----------+ | NAME | |-----------| | John_down | +-----------+SELECT name FROM like_ex WHERE name NOT LIKE 'John%' ORDER BY name;+-----------+ | NAME | |-----------| | | | Elaine | | Joe Doe | | Joe down | +-----------+SELECT name FROM like_ex WHERE name NOT LIKE '' ORDER BY name;+-------------+ | NAME | |-------------| | Elaine | | Joe Doe | | Joe down | | John Dddoe | | John_down | +-------------+
O exemplo a seguir usa uma cláusula ESCAPE:
INSERT INTO like_ex (name) VALUES ('100 times'), ('1000 times'), ('100%');Sem o caractere de escape, o sinal de porcentagem (“%”) é tratado como um curinga:
SELECT * FROM like_ex WHERE name LIKE '100%' ORDER BY 1;+------------+ | NAME | |------------| | 100 times | | 100% | | 1000 times | +------------+Com o caractere de escape, o sinal de porcentagem (‘%’) é tratado como um literal:
SELECT * FROM like_ex WHERE name LIKE '100^%' ESCAPE '^' ORDER BY 1;+------+ | NAME | |------| | 100% | +------+
O exemplo a seguir usa uma cláusula ESCAPE na qual a barra invertida é o caractere de escape. Note que a barra invertida em si mesma deve ser evitada tanto na cláusula ESCAPE quanto na expressão:
SELECT * FROM like_ex WHERE name LIKE '100\\%' ESCAPE '\\' ORDER BY 1;+------+ | NAME | |------| | 100% | +------+