2010-03-24 20 views

Respuesta

293

CHARINDEX() busca una subcadena dentro de una cadena más grande, y devuelve la posición del partido, o 0 si no se encuentra una coincidencia

if CHARINDEX('ME',@mainString) > 0 
begin 
    --do something 
end 

Edición o de respuesta Daniels, si estás querer encontrar una palabra (y no subcomponentes de palabras), su llamada CHARINDEX se vería así:

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ') 

(añadir más recursivo REPLACE() llama para cualquier otro puntuacion que puede ocurrir

+1

Okie usé PATINDEX. ¡Gracias! – NLV

+0

s/recursivo/anidado/- "recursivo" sería si 'REPLACE' se llamara a sí mismo; "anidado" es cuando el resultado de una llamada de función se pasa inmediatamente a otra función. –

+1

¿Sería el 'ME' sensible a las mayúsculas y minúsculas en SQL o también tendría que hacer una instrucción if para 'Me' y 'me'? –

-8

Usted no dice qué variante del SQL (es decir, qué base de datos), pero en Oracle puede utilizar Instr() y en SQL Server, puede utilizar substring()

+7

'SUBSTRING' * Devuelve parte de un carácter, binario, texto o expresión de imagen * según [MSDN] (http://msdn.microsoft.com/en-au/library/ms187748 (v = sql.90)) .aspx). Sin embargo, la pregunta es sobre determinar si una cadena contiene una subcadena. – Sam

+30

¿Qué quieres decir? El título contiene "SQL Server 2005". "SQL Server" es el producto de Microsoft. * [Servidor SQL] (http://en.wikipedia.org/wiki/Microsoft_SQL_Server) *. * [SQL Server 2005] (http://en.wikipedia.org/wiki/Microsoft_SQL_Server#SQL_Server_2005) * –

+1

Probablemente confundió el producto SQL Server de MS con un servidor sql = ¿cualquier servidor que aloja un DB sql? Mi primer día con MSSQLS me confundí, ¿es SQL DB pero como se llama? : D – DanteTheSmith

98

Usted sólo puede utilizar comodines en el predicado (después de SI, DONDE u ON):

@mainstring LIKE '%' + @substring + '%' 

o en este caso específico

' ' + @mainstring + ' ' LIKE '% ME[., ]%' 

(Ponga los espacios en la cadena entre comillas si usted está buscando la palabra entera, o dejarlos fuera si YO puedo ser pa rt de una palabra más grande).

+2

Si está buscando coincidencias de palabras (su segundo ejemplo), necesitaría a) agregar un espacio antes y después de @mainString (para que pueda hacer coincidir la primera o la última palabra), yb) eliminar la puntuación –

+0

bien punto, corrigiendo eso ahora. –

+0

Esto es mejor que CHARINDEX() para mí porque en mi caso particular, no puedo ejecutar la función CHARINDEX() debido a permisos limitados. –

2
DECLARE @str VARCHAR(255) 
SET @str = 'this is @n $tring' 

IF (@str LIKE '%[^a-zA-Z0-9]%') 
    PRINT 'have some ''special'' characters' 
ELSE 
    PRINT 'have not ''special'' characters' 

puede que esto te ayude.

Cuestiones relacionadas