2009-08-07 14 views
50

En T-SQL, ¿cómo verificaría si una cadena no contiene otra cadena?Compruebe si la cadena no contiene otra cadena

Tengo un nvarchar que podría ser "Naranjas Manzanas".

Me gustaría hacer una actualización donde, por ejemplo, una columna no contiene contiene "Manzanas".

¿Cómo se puede hacer esto?

+1

favor ser más preciso con los títulos de sus preguntas. '" contiene otra cadena "! =" no contiene otra cadena "' – lordcheeto

+0

-1 para el título inexacto. –

+1

Cambié el título. Mejor tarde que nunca :) – Dofs

Respuesta

75
WHERE NOT (someColumn LIKE '%Apples%') 
+1

¿Por qué no pensé en eso? Iba por algo mucho más avanzado :) – Dofs

+0

Usa comillas simples en lugar de dobles: '% Apples%'. Traté de editar la publicación, pero SO requiere que las ediciones tengan seis caracteres o más. – DeveloperDan

+0

@DeveloperDan - gracias. fijo. –

24

O, alternativamente, se puede usar esto:

WHERE CHARINDEX(N'Apples', someColumn) = 0 

No está seguro de cuál funciona mejor - tienes que prueba de ello! :-)

Marc

ACTUALIZACIÓN: el rendimiento parece ser más o menos a la par con la otra solución (DONDE someColumn no me gusta '%% Manzanas') - por lo que es realmente sólo una cuestión de preferencias personales .

+0

El rendimiento no es un problema tan grande en mi caso. – Dofs

+2

+1: si el texto que se va a combinar es dinámico en lugar de una cadena estática como 'Manzanas', este método es superior, ya que no necesita preocuparse por comodines como '%', '_' que ser emparejado por el operador LIKE. – Joe

+0

@Joe Si quieres ser pedante al respecto, entonces este tampoco funcionaría en todos los casos. CHARINDEX no distingue entre mayúsculas y minúsculas. entonces, si estuvieras buscando una manzana en un campo de manzanas, obtendrías todo. Sé que han pasado algunos años desde que se publicó esta publicación, pero aún así. Ambas respuestas son válidas dependiendo del tema y ninguna respuesta cubre todas las bases. a -1 de ti por la respuesta aceptada solo parece un poco ... ¿es la palabra correcta? – DDuffy

10

Use esto como su condición WHERE

WHERE CHARINDEX('Apples', column) = 0 
7

Las respuestas que consiguió asumió texto estático con el que comparar. Si desea comparar contra otra columna (por ejemplo, se está uniendo dos tablas, y que desee encontrar aquellos en los que una columna de una tabla es parte de una columna de otra tabla), se puede hacer esto

WHERE NOT (someColumn LIKE '%' || someOtherColumn || '%') 
+1

+1, también puede usar la sintaxis NOT LIKE. – Dunc

+2

No funcionará si someOtherColumn contiene un carácter comodín como '%', '_'. – Joe

Cuestiones relacionadas