2009-05-14 9 views
52

Ich habe eine Lösung für die Suche nach der Position eines Unterstreichungs mit PATINDEX gefunden:Wie Unterstreichungszeichen in PATINDEX-Musterargument zu entkommen?

DECLARE @a VARCHAR(10) 
SET  @a = '37_21' 

PRINT PATINDEX('%_%', @a)     -- return 1 (false) 
PRINT PATINDEX('%!%', REPLACE(@a, '_', '!')) -- return 3 (correct) 

Haben Sie andere Ideen? Wie eine Möglichkeit, dem Unterstrich zu entkommen?

Antwort

93

ich habe es immer mit Klammern getan: '%[_]%'

+7

+1 siehe: http://msdn.microsoft.com/en-us/library/ms187489(SQL.90).aspx, Abschnitt "Search für Wildcard-Zeichen " – Tomalak

5

Sie entkommen können die [ und ] Zeichen mit etwa so:

PRINT PATINDEX('%[_]%', '37_21')

20

zwei Unterstrichen entsprechen, werden jeweils viel klammert

'%[__]%' -- matches single _ with anything after 

'%[_][_]%' -- matches two consecutive _