2010-09-07 4 views
41

utilizando SQL Server 2008. I tienen una tabla con la siguiente columna:SQL Server como los personajes que contiene soporte

sampleData (nvarchar(max)) 

El valor para esta columna en algunas de estas filas son listas formateado como sigue:

["value1","value2","value3"] 

Estoy tratando de escribir una consulta simple que devolverá todas las filas con listas formateadas así, simplemente detectando el corchete de apertura.

SELECT * from sampleTable where sampleData like '[%' 

La consulta anterior no funciona porque '[' es un carácter especial, y no puedo por la vida de a averiguar cómo escapar el soporte de manera que mi consulta hace lo que yo quiero.

¡Gracias por cualquier sugerencia!

Respuesta

57
... like '[[]%' 

Se utilizan [ ] para rodear un carácter especial (o rango)

consulte la sección "Uso de caracteres comodín como literales" en SQL Server LIKE

Edición 24 Nov 2011

Nota: No necesita escapar del corchete de cierre ...

23

Aparte de la respuesta de gbn, el otro método es usar el ESCAPE opción:

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\' 

Véase el documentation para más detalles

2

Sólo una nota más aquí ... Si desea incluir el soporte (u otras ofertas) dentro de un conjunto de caracteres, sólo tienen la opción de usar ESCAPE (ya que ya está usando los corchetes para indicar el conjunto). También DEBE especificar la cláusula ESCAPE, ya que no hay un carácter de escape predeterminado (no es una barra invertida por defecto como pensé por primera vez, proveniente de un fondo C).

p. Ej. si quiero sacar filas en las que una columna contiene nada fuera de un conjunto de caracteres 'aceptables', por el bien del argumento, digamos alfanuméricos ... podríamos empezar con este

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%' 

Así que vamos a volver nada que tenga cualquier carácter que no esté en la lista (debido al carácter de cursor inicial ^).

Si luego queremos agregar caracteres especiales en este conjunto de caracteres aceptables, no podemos nido de los soportes, de modo que debemos utilizar un carácter de escape, así ...

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\' 

Precediendo a los soportes (individualmente) con una barra inclinada invertida e indicando que estamos usando una barra diagonal inversa para el carácter de escape, nos permite escapar dentro de los paréntesis de funcionamiento que indican el conjunto de caracteres.

Lo siento por el ejemplo tonto, pero espero que ayude a alguien

+0

así que estamos de suerte si estamos usando PATINDEX? – Sam

Cuestiones relacionadas