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?

201
demandé sur gotqn 2010-03-24 10:14:44

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

329
répondu Damien_The_Unbeliever 2010-03-24 09:20:08

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).

105
répondu Daniel Quinlan 2010-03-25 09:56:09
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.

3
répondu Hardik 2017-05-09 12:01:49

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 ()

-9
répondu Michael Howard-MSFT 2010-03-24 07:17:41