web-dev-qa-db-fra.com

Comment échapper le caractère de soulignement dans l'argument de modèle PATINDEX?

J'ai trouvé une solution pour trouver la position d'un trait de soulignement avec PATINDEX:

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

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

Avez-vous d'autres idées? Vous voulez échapper au caractère de soulignement?

67
podosta

Je l'ai toujours fait avec des crochets: '%[_]%'

115
Curt Hagenlocher

Pour faire correspondre deux traits de soulignement, chacun doit être placé entre crochets

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

'%[_][_]%' -- matches two consecutive _
23
Leif Neland

Vous pouvez vous échapper en utilisant les caractères [ Et ] Comme ceci:

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

5
Charlie