2010-03-24 2 views

risposta

293

CHARINDEX() Cerca una stringa all'interno di una stringa più grande, e restituisce la posizione della partita, o 0 se nessuna corrispondenza viene trovato

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

Modifica o da Daniels risposta, se siete volendo trovare una parola (e non sottocomponenti di parole), la chiamata CHARINDEX sarà simile:

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

(aggiungere più ricorsiva REPLACE() chiama per qualsiasi altra punteggiatura che possono verificarsi

+1

Okie ho usato PATINDEX. Grazie! – NLV

+0

s/ricorsivo/annidato/- "ricorsivo" sarebbe se "SOSTITUISCI" si chiamava da solo; "annidato" è quando il risultato di una chiamata di funzione viene immediatamente passato a un'altra funzione. –

+1

Il 'ME' dovrebbe essere case sensitive in SQL o dovresti fare anche un'istruzione if per 'Me' e 'me'? –

-8

Non si dice che il sapore di SQL (ie; quale database), ma in Oracle è possibile utilizzare Instr() e in SQL Server è possibile utilizzare SUBSTRING()

+7

'SUBSTRING' * Restituisce parte di un carattere, binario, testo o immagine * espressione in base a [MSDN] (http://msdn.microsoft.com/en-us/library/ms187748 (v = sql.90) aspx). Tuttavia, la domanda consiste nel determinare se una stringa contiene una sottostringa. – Sam

+30

Cosa intendi? Il titolo contiene "SQL Server 2005". "SQL Server" è il prodotto di Microsoft. * [SQL Server] (http://en.wikipedia.org/wiki/Microsoft_SQL_Server) *. * [SQL Server 2005] (http://en.wikipedia.org/wiki/Microsoft_SQL_Server#SQL_Server_2005) * –

+1

Probabilmente ha confuso il prodotto SQL Server da MS con un server sql = qualsiasi server che ospita un DB sql? Il mio primo giorno in assoluto con MSSQLS mi sono confuso, questo è il DB SQL ma come si chiama? : D – DanteTheSmith

98

Si può solo utilizzare i caratteri jolly nel predicato (dopo se, ove o ON):

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

o in questo caso specifico

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

(Mettere gli spazi nella stringa tra virgolette, se siete alla ricerca per l'intera parola, o lasciarli fuori se ME può essere pa rt di una parola più grande).

+2

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

+0

buona punto, correggendo che ora. –

+0

Questo è meglio di CHARINDEX() per me perché nel mio caso particolare, non riesco a eseguire la funzione CHARINDEX() a causa di autorizzazioni limitate. –

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' 

può questo ti aiuterà.