¿Cuál es la lista completa de todos los caracteres especiales para un SQL (estoy interesado en SQL Server pero otros también serían buenos) cláusula LIKE?
P.ej
SELECT Name FROM Person WHERE Name LIKE '%Jon%'
- %
- _
- [especificador] Por ejemplo, [az]
- [^ especificador]
- Cláusula ESCAPE Ej.% 30! %% 'ESCAPE'! ' evaluará el 30% como verdadero
- 'los personajes deben escapar con' Por ejemplo, se convierten en ellos '
%
- Cualquier cadena de cero o más caracteres._
- Cualquier carácter- Cláusula ESCAPE Ej.% 30! %% 'ESCAPE'! ' evaluará el 30% como verdadero
%
- Cualquier cadena de cero o más caracteres._
- Cualquier carácter- Cláusula ESCAPE Ej.% 30! %% 'ESCAPE'! ' evaluará el 30% como verdadero
Sybase
- %
- _
- [especificador] Por ejemplo, [az]
- [^ especificador]
%
- Cualquier cadena de cero o más caracteres._
- Cualquier carácterGuía de referencia aquí [PDF]
%
- Cualquier cadena de cero o más caracteres._
- Cualquier carácter- Cláusula ESCAPE Ej.% 30! %% 'ESCAPE'! ' evaluará el 30% como verdadero
- %
- _
- Un carácter ESCAPE solo si se especifica .
PostgreSQL también tiene el SIMILAR TO
operador que agrega lo siguiente:
[specifier]
[^specifier]
|
- cualquiera de las dos alternativas*
- repetición del ítem anterior cero o más veces.+
- repetición del ítem anterior una o más veces.()
- agrupar elementos juntos
La idea es hacer de esta una Wiki comunitaria que pueda convertirse en una "ventanilla única" para esto.
sql
special-characters
sql-like
a_horse_with_no_name
fuente
fuente
LIKE
; por ejemploWHERE familyname = 'O''Toole'
. En tercer lugar, elSIMILAR TO
operador introduce una especie de expresión regular híbrida, que tiene sus propias características (y muchos más caracteres especiales), por lo que probablemente no debería incluirse aquí. Supongo que hace 3 comentarios, pero nadie espera la Inquisición española.Respuestas:
Para SQL Server, desde http://msdn.microsoft.com/en-us/library/ms179859.aspx :
% Cualquier cadena de cero o más caracteres.
WHERE title LIKE '%computer%'
busca todos los títulos de libros con la palabra "computadora" en cualquier parte del título del libro._ Cualquier carácter individual.
WHERE au_fname LIKE '_ean'
busca todos los nombres de cuatro letras que terminan en ean (Dean, Sean, etc.).[] Cualquier carácter individual dentro del rango especificado ([af]) o conjunto ([abcdef]).
WHERE au_lname LIKE '[C-P]arsen'
encuentra los apellidos de los autores que terminan con arsen y comienzan con cualquier carácter entre C y P, por ejemplo, Carsen, Larsen, Karsen, etc. En las búsquedas de rango, los caracteres incluidos en el rango pueden variar según las reglas de clasificación de la colación.[^] Cualquier carácter individual que no esté dentro del rango especificado ([^ af]) o establecido ([^ abcdef]).
WHERE au_lname LIKE 'de[^l]%'
todos los apellidos de los autores que comienzan con de y donde la siguiente letra no es l.fuente
ANSI SQL92 :
Es decepcionante que muchas bases de datos no se adhieran a las reglas estándar y agreguen caracteres adicionales, o habiliten ESCAPE incorrectamente con un valor predeterminado de '\' cuando falta. ¡Como si no tuviéramos ya suficientes problemas con '\'!
Es imposible escribir código independiente de DBMS aquí, porque no sabe qué caracteres tendrá que escapar, y el estándar dice que no puede escapar de cosas que no necesitan escapar. (Ver sección 8.5 / Reglas generales / 3.a.ii.)
¡Gracias SQL! gnnn
fuente
Debe agregar que debe agregar un extra 'para escapar de un existente' en SQL Server:
smith's -> smith's
fuente
Sybase:
fuente
Respuesta potencial para SQL Server
Interesante, acabo de ejecutar una prueba usando LinqPad con SQL Server, que debería estar ejecutando Linq a SQL debajo y genera la siguiente declaración SQL.
Registros .Donde (r => r.Name.Contains ("lkjwer --_ ~ []"))
Así que todavía no lo he probado, pero parece que potencialmente la
ESCAPE '~'
palabra clave puede permitir el escape automático de una cadena para usarla dentro de una expresión similar.fuente
ESCAPE
porque permite usar dos caracteres por carácter de escape (por ejemplo, se%
convierte~%
) en lugar de tres (por ejemplo, sinESCAPE
, se%
convierte[%]
).