2010-03-24 10 views

Odpowiedz

293

CHARINDEX() wyszukuje podciągu wewnątrz większego łańcucha, i zwraca pozycję w tym meczu, lub 0 jeśli nie znaleziono

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

Edit lub daniels odpowiedź, jeśli jesteś chcąc znaleźć słowo (a nie podskładniki słów), połączenie CHARINDEX wyglądałby następująco:

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

(Dodaj więcej rekurencyjne replace() wzywa do innych znaków interpunkcyjnych, które mogą wystąpić

+1

Okie i użyłem PATINDEX. Dziękuję Ci! – NLV

+0

s/rekursywny/zagnieżdżony/- "rekursywny" byłby, gdyby 'REPLACE' wywołał się; "zagnieżdżony" jest, gdy wynik wywołania funkcji jest natychmiast przekazywany do innej funkcji. –

+1

Czy "ME" rozróżniał wielkość liter w SQL, czy też musiałbyś zrobić instrukcję if dla "Ja" i "mnie"? –

-8

Nie mów których smak SQL (tzn którym baza danych), ale w Oracle można użyć instr() i SQL Server można użyć substring()

+7

'SUBSTRING' * Zwraca część znaku, wyrażenie binarne, tekst lub obraz * zgodnie z [MSDN] (http://msdn.microsoft.com/en-au/library/ms187748 (v = sql.90)) .aspx). Jednak pytanie dotyczy określenia, czy łańcuch zawiera podciąg. – Sam

+30

Co masz na myśli? Tytuł zawiera "SQL Server 2005". "Serwer SQL" to produkt firmy Microsoft. * [Serwer SQL] (http://en.wikipedia.org/wiki/Microsoft_SQL_Server) *. * [SQL Server 2005] (http://en.wikipedia.org/wiki/Microsoft_SQL_Server#SQL_Server_2005) * –

+1

Prawdopodobnie pomylił produkt SQL Server z MS z serwerem sql = dowolnym serwerem, który obsługuje DB sql? Mój pierwszy dzień z MSSQLS wprawił mnie w zakłopotanie, oke to SQL DB, ale jak to się nazywa? : D – DanteTheSmith

98

można po prostu użyć symboli wieloznacznych w orzecznika (po IF, gdzie i ON):

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

czy w tym konkretnym przypadku

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

(umieścić przestrzenie w cudzysłowie jeśli szukasz całego słowa, albo zostawić je jeśli ME może być pa rt większego słowa).

+2

Jeśli szukasz dopasowań do słów (twój drugi przykład), musisz a) dodać spację przed i po @mainString (aby dopasować pierwsze lub ostatnie słowo) i b) usunąć interpunkcja –

+0

dobra punkt, poprawiając to teraz. –

+0

To jest lepsze niż CHARINDEX() dla mnie, ponieważ w moim szczególnym przypadku, nie mogę wykonać funkcji CHARINDEX() ze względu na ograniczone uprawnienia. –

2
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' 

może to ci pomoże.

Powiązane problemy