Controllare se una stringa contiene una sottostringa in SQL Server 2005, utilizzando una procedura memorizzata


245

Ho una stringa, @mainString = 'CATCH ME IF YOU CAN'. Voglio verificare se la parola MEè dentro @mainString.

Come posso verificare se una stringa ha una sottostringa specifica in SQL?

Risposte:


395

CHARINDEX () cerca una sottostringa all'interno di una stringa più grande e restituisce la posizione della corrispondenza o 0 se non viene trovata alcuna corrispondenza

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

Modifica o dalla risposta di Daniels, se vuoi trovare una parola (e non i sottocomponenti di parole), la tua chiamata CHARINDEX sarebbe simile a:

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

(Aggiungi altre chiamate REPLACE () ricorsive per qualsiasi altra punteggiatura che può verificarsi


2
Ok, ho usato PATINDEX. Grazie!
NLV,

1
s / ricorsivo / nidificato / - "ricorsivo" sarebbe se REPLACEchiamato se stesso; "nidificato" è quando il risultato di una chiamata di funzione viene immediatamente passato a un'altra funzione.
Finanzia la causa di Monica il

2
"ME" è sensibile al maiuscolo / minuscolo in SQL o dovresti anche fare un'istruzione if per "Me" e "me"?
a.powell,

5
@ a.powell - dipende dalle regole di confronto coinvolte. Puoi sempre forzarlo all'interno di questo test se ne hai bisogno in un modo o nell'altro. Ad esempio confrontare select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')e select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home'). (Nelle regole di confronto, CSsta per Case Sensitive e sono sicuro che puoi allenarti CI).
Damien_The_Unbeliever

2
@VincePanuccio - L' elaborazione delle stringhe di T-SQL è notoriamente debole. Il punto di forza di SQL è nelle operazioni basate su set. In questo caso (voler eseguire l'elaborazione delle stringhe e qualcosa in cui una regex sarebbe una soluzione ovvia), è più il caso che scelgano lo strumento sbagliato per il lavoro.
Damien_The_Unbeliever,

120

È possibile utilizzare solo caratteri jolly nel predicato (dopo IF, WHERE o ON):

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

o in questo caso specifico

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

(Metti gli spazi nella stringa tra virgolette se stai cercando l'intera parola o lasciali fuori se ME può far parte di una parola più grande).


3
Se stai cercando corrispondenze di parole (il tuo secondo esempio), dovresti a) aggiungere uno spazio prima e dopo @mainString (in modo da poter abbinare la prima o l'ultima parola) eb) rimuovere la punteggiatura
Damien_The_Unbeliever

2
Questo è meglio di CHARINDEX () per me perché nel mio caso particolare, non posso eseguire la funzione CHARINDEX () a causa di autorizzazioni limitate.
James T Snell,

1
(Basta non dimenticare di aggiungere il prefisso a tutte le costanti stringa Nse la colonna è an nvarchar, altrimenti si ottengono conversioni per riga)
Richard Szalay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.