Tengo una cadena, @mainString = 'CATCH ME IF YOU CAN'. Quiero comprobar si la palabra ME está dentro de @mainString.

¿Cómo puedo comprobar si una cadena tiene una subcadena en SQL?

InformationsquelleAutor NLV | 2010-03-24

2 Comentarios

  1. 378

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

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

    Editar o de daniels respuesta, si usted está queriendo encontrar una palabra (y no subcomponentes de palabras), su CHARINDEX llamada sería como:

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

    (Añadir más recursiva REPLACE() llamadas para cualquier otro signo de puntuación que puede producirse

    • Okie he utilizado PATINDEX. Gracias!
    • s/recursivo/anidada/ — «recursivo» sería si REPLACE se llamó a sí misma; «anidada» es cuando el resultado de una llamada a una función se pasa inmediatamente a otra función.
    • Sería el ‘YO’ entre mayúsculas y minúsculas en SQL o también hay que hacer una declaración de si para el ‘Yo’ y el ‘yo’?
    • depende de la intercalación que se trata. Siempre se puede forzar a que dentro de este examen si usted necesita una manera o de la otra. E. g. comparar select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home') y select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home'). (En las intercalaciones, CS representa entre mayúsculas y minúsculas y estoy seguro de que usted puede trabajar CI).
    • SQL realmente aspirar a ser un «idioma». El segundo ejemplo es horrible!
    • T-SQL string de procesamiento es notoriamente débil. SQL de la fuerza está basado en conjunto de las operaciones. En este caso (con ganas de hacer el procesamiento de cadenas, y algo donde un regex sería una solución obvia), es más un caso de ellos escoger la herramienta equivocada para el trabajo.

  2. 116

    Usted puede utilizar caracteres comodín en el predicado (después SI, DÓNDE o EN):

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

    o en este caso específico

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

    (Poner los espacios en la cadena entre comillas si usted está buscando para el conjunto de la palabra, o salir de ellos si ME pueden formar parte de una palabra más grande).

    • Si usted está buscando la palabra coincide con (el segundo ejemplo), sería necesario añadir un espacio antes y después de @mainString (por lo que puede coincidir con la primera o la última palabra), y b) eliminar los signos de puntuación
    • buen punto, la corrección que ahora.
    • Esto es mejor que CHARINDEX() para mí, porque en mi caso particular, no puedo ejecutar el CHARINDEX() función, debido a lo limitado de permisos.
    • (Pero no te olvides de prefijo de todos sus constantes de cadena con N si tu columna es un nvarchar, de lo contrario se obtiene por la fila de conversiones)

Dejar respuesta

Please enter your comment!
Please enter your name here