265 votes

Vérifier si une chaîne contient une sous-chaîne dans SQL Server 2005, en utilisant une procédure stockée

J'ai une chaîne, @mainString = 'CATCH ME IF YOU CAN' . Je veux vérifier si le mot ME est à l'intérieur de @mainString .

Comment vérifier si une chaîne a une sous-chaîne spécifique en SQL?

419voto

Damien_The_Unbeliever Points 102139

CHARINDEX () recherche une sous-chaîne dans une chaîne plus grande et renvoie la position de la correspondance, ou 0 si aucune correspondance n'est trouvée

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

Edit ou from daniels answer, si vous voulez trouver un mot (et non des sous-composants de mots), votre appel CHARINDEX ressemblerait à ceci:

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

(Ajouter des appels de remplacement plus récursifs pour toute autre ponctuation pouvant survenir)

129voto

daniel Points 1049

Vous pouvez simplement utiliser des caractères génériques dans le prédicat (après IF, WHERE ou ON):

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

ou dans ce cas précis

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

(Placez les espaces dans la chaîne entre guillemets si vous recherchez le mot entier, ou laissez-les si ME peut faire partie d'un mot plus grand).

-10voto

Vous ne dites pas quelle version de SQL (c'est-à-dire, quelle base de données) mais dans Oracle, vous pouvez utiliser instr () et dans SQL Server, vous pouvez utiliser SUBSTRING ()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X