Vérifiez 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 dans SQL?
4 réponses
CHARINDEX() recherche une sous-chaîne dans une chaîne plus longue, 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 de la réponse de daniels, si vous voulez trouver un mot (et non des sous-Composants de mots), votre appel CHARINDEX ressemblerait à:
CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')
(Ajouter plus récursif REPLACE () appelle pour toute autre ponctuation qui peut se produire
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 spécifique
' ' + @mainstring + ' ' LIKE '% ME[., ]%'
(Mettez les espaces dans la chaîne entre guillemets si vous cherchez le mot entier, ou laissez-les si je peux faire partie d'un mot plus grand).
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'
Que cela vous aidera.
Vous ne dites pas quelle saveur de SQL (ie; quelle base de données) mais dans Oracle vous pouvez utiliser instr () et dans SQL Server vous pouvez utiliser SUBSTRING ()