Qual é a lista completa de todos os caracteres especiais para uma cláusula LIKE do SQL (estou interessado no SQL Server, mas outros seriam bons também)?
Por exemplo
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
- %
- _
- [especificador] Por exemplo, [az]
- [^ especificador]
- Cláusula ESCAPE Por exemplo% 30! %% 'ESCAPE'! ' irá avaliar 30% como verdadeiro
- 'personagens precisam ser escapados com' Ex: eles se tornam eles 'estão
%
- Qualquer sequência de zero ou mais caracteres._
- Qualquer personagem- Cláusula ESCAPE Por exemplo% 30! %% 'ESCAPE'! ' irá avaliar 30% como verdadeiro
%
- Qualquer sequência de zero ou mais caracteres._
- Qualquer personagem- Cláusula ESCAPE Por exemplo% 30! %% 'ESCAPE'! ' irá avaliar 30% como verdadeiro
Sybase
- %
- _
- [especificador] Por exemplo, [az]
- [^ especificador]
%
- Qualquer sequência de zero ou mais caracteres._
- Qualquer personagemGuia de referência aqui [PDF]
%
- Qualquer sequência de zero ou mais caracteres._
- Qualquer personagem- Cláusula ESCAPE Por exemplo% 30! %% 'ESCAPE'! ' irá avaliar 30% como verdadeiro
- %
- _
- Um caractere ESCAPE apenas se especificado .
PostgreSQL também possui o SIMILAR TO
operador que adiciona o seguinte:
[specifier]
[^specifier]
|
- qualquer uma das duas alternativas*
- repetição do item anterior zero ou mais vezes.+
- repetição do item anterior uma ou mais vezes.()
- agrupar itens
A ideia é fazer deste um Wiki comunitário que pode se tornar um "balcão único" para isso.
sql
special-characters
sql-like
a_horse_with_no_name
fonte
fonte
LIKE
; por exemploWHERE familyname = 'O''Toole'
. Terceiro, oSIMILAR TO
operador introduz uma espécie de expressão regular híbrida, que tem seus próprios recursos (e muitos mais caracteres especiais), então provavelmente não deve ser incluída aqui. Acho que isso faz 3 comentários, mas ninguém espera a Inquisição Espanhola.Respostas:
Para SQL Server, em http://msdn.microsoft.com/en-us/library/ms179859.aspx :
% Qualquer string de zero ou mais caracteres.
WHERE title LIKE '%computer%'
encontra todos os títulos de livros com a palavra 'computador' em qualquer lugar no título do livro._ Qualquer personagem único.
WHERE au_fname LIKE '_ean'
encontra todos os primeiros nomes de quatro letras que terminam com ean (Dean, Sean e assim por diante).[] Qualquer caractere único dentro do intervalo especificado ([af]) ou conjunto ([abcdef]).
WHERE au_lname LIKE '[C-P]arsen'
encontra sobrenomes de autores terminando com arsen e começando com qualquer caractere único entre C e P, por exemplo Carsen, Larsen, Karsen e assim por diante. Em pesquisas de intervalo, os caracteres incluídos no intervalo podem variar dependendo das regras de classificação do agrupamento.[^] Qualquer caractere único fora do intervalo especificado ([^ af]) ou conjunto ([^ abcdef]).
WHERE au_lname LIKE 'de[^l]%'
todos os sobrenomes de autores começando com de e onde a letra seguinte não for l.fonte
ANSI SQL92 :
É decepcionante que muitos bancos de dados não sigam as regras padrão e adicionem caracteres extras ou habilitem ESCAPE incorretamente com um valor padrão '\' quando estiver ausente. Como se já não tivéssemos problemas suficientes com '\'!
É impossível escrever código independente de DBMS aqui, porque você não sabe de quais caracteres terá que escapar, e o padrão diz que você não pode escapar de coisas que não precisam ser escapadas. (Consulte a seção 8.5 / Regras Gerais / 3.a.ii.)
Obrigado SQL! gnnn
fonte
Você deve adicionar que precisa adicionar um extra 'para escapar de um existente' no SQL Server:
smith's -> smith's
fonte
Sybase:
fonte
Resposta potencial para SQL Server
Interessante, acabei de executar um teste usando LinqPad com SQL Server que deveria estar executando apenas Linq to SQL por baixo e gera a seguinte instrução SQL.
Registros. Onde (r => r.Name.Contains ("lkjwer --_ ~ []"))
Portanto, ainda não testei, mas parece que potencialmente a
ESCAPE '~'
palavra - chave pode permitir o escape automático de uma string para uso em uma expressão semelhante.fonte
ESCAPE
porque permite o uso de dois caracteres por caractere de escape (por exemplo,%
torna-se~%
) em vez de três (por exemplo, semESCAPE
,%
torna-se[%]
).