Critères de recherche spéciaux

Le mot clé LIKE recherche des valeurs de type chaîne de caractères, date ou heure qui correspondent à un modèle donné. Pour plus d'informations, consultez Types de données (Transact-SQL). Le mot clé LIKE utilise une expression régulière contenant le modèle auquel les valeurs doivent correspondre. Ce modèle contient la chaîne de caractères à rechercher, qui peut elle-même contenir toute combinaison de quatre caractères génériques.

Caractère générique

Signification

%

Toute chaîne comprenant entre zéro et un nombre quelconque de caractères.

_

Tout caractère unique.

[ ]

Un caractère de l'intervalle spécifié (par exemple, [a-f]) ou de l'ensemble spécifié (par exemple, [abcdef]).

[^]

Tout caractère situé en dehors de l'intervalle spécifié (par exemple, [^a - f]) ou de l'ensemble spécifié (par exemple, [^abcdef]).

Placez entre guillemets les caractères génériques et la chaîne de caractères, par exemple :

  • LIKE 'Mc%' recherche toutes les chaînes commençant par les lettres « Mc » (McBadden).

  • LIKE '%inger' recherche toutes les chaînes se terminant par les lettres « inger » (Ringer, Stringer).

  • LIKE '%en%' recherche toutes les chaînes contenant les lettres « en » quelque part dans la chaîne (Bennet, Green, McBadden).

  • LIKE '_heryl' recherche tous les noms de six lettres se terminant par les lettres « heryl » (Cheryl, Sheryl).

  • LIKE '[CK]ars[eo]n' recherche les noms Carsen, Karsen, Carson et Karson (Carson).

  • LIKE '[M-Z]inger' recherche tous les noms se terminant par les lettres « inger » et commençant par n'importe quelle lettre allant de M à Z (Ringer).

  • LIKE 'M[^c]%' recherche tous les noms commençant par la lettre M et dont la deuxième lettre n'est pas « c » (MacFeather).

La requête suivante recherche tous les numéros de téléphone de la table Contact dont le préfixe est 415 :

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone LIKE '415%'

NOT LIKE s'emploie avec les mêmes caractères génériques. Pour obtenir tous les numéros de téléphone de la table Contact dont le préfixe est différent de 415, utilisez l'une des requêtes équivalentes suivantes :

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone NOT LIKE '415%'

-- Or

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE NOT Phone LIKE '415%'

La clause IS NOT NULL peut s'utiliser avec les caractères génériques et la clause LIKE. La requête suivante, par exemple, extrait de la table Contact les numéros de téléphone commençant par 415 et dont la valeur est IS NOT NULL :

USE AdventureWorks;
GO
SELECT Phone
FROM Person.Contact
WHERE Phone LIKE '415%' and Phone IS NOT NULL

Important

Le résultat des instructions utilisant le mot clé LIKE dépend de l'ordre de tri choisi lors de l'installation. Pour plus d'informations sur les effets des différents ordres de tri, consultez Utilisation des classements.

Les seuls critères de la clause WHERE utilisables sur des colonnes de type text sont LIKE, IS NULL ou PATINDEX.

Les caractères génériques employés sans LIKE sont interprétés comme des constantes plutôt que comme un modèle, c'est-à-dire qu'ils ne représentent que leur propre valeur. La requête suivante tente de trouver les numéros de téléphone composés uniquement des quatre caractères 415%. Elle ne trouvera pas de numéro de téléphone commençant par 415. Pour plus d'informations sur les constantes, consultez Constantes (moteur de base de données).

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone = '415%'

Lors de l'utilisation des caractères génériques, il est également important de tenir compte de leur influence sur les performances du système. Si une expression commence par un caractère générique, vous ne pouvez pas utiliser d'index. (De même que vous ne sauriez pas où commencer dans un annuaire, en possession du nom « %mith », au lieu de « Smith »). Un caractère générique situé à l'intérieur ou à la fin d'une expression n'empêche pas l'utilisation d'un index. (Dans un annuaire téléphonique, vous sauriez où chercher « Samuel% », même si les noms « Samuels » et « Samuelson » s'y trouvent)

Recherche des caractères génériques

Vous pouvez rechercher des caractères génériques. Deux méthodes sont à votre disposition pour spécifier un caractère généralement interprété comme générique :

  • Utilisez le mot clé ESCAPE pour définir un caractère d'échappement. Lorsque vous placez le caractère d'échappement devant un caractère générique dans un modèle, le caractère générique est interprété comme un caractère. Par exemple, pour rechercher la chaîne 5% dans une chaîne, utilisez :

    WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
    

    Dans cette clause LIKE, les signes pourcentage (%) placés de part et d'autre sont interprétés comme des caractères génériques tandis que le signe pourcentage précédé d'une barre oblique (/) est interprété comme le caractère %.

  • Utilisez les crochets ([ ]) pour entourer le caractère générique. Pour rechercher un tiret (-), plutôt que de l'utiliser pour spécifier un intervalle de recherche, placez-le comme premier caractère entre deux crochets :

    WHERE ColumnA LIKE '9[-]5'
    

    Le tableau ci-dessous illustre l'utilisation de caractères génériques entre crochets.

    Symbole

    Description

    LIKE '5[%]'

    5%

    LIKE '5%'

    5 suivi de n'importe quelle chaîne de 0 caractère ou plus

    LIKE '[_]n'

    _n

    LIKE '_n'

    Mot de deux lettres se terminant par « n »

    LIKE '[a-cdf]'

    a, b, c, d, ou f

    LIKE '[-acdf]'

    -, a, c, d, ou f

    LIKE '[ [ ]'

    [

    LIKE ']'

    ]

Lorsque vous comparez des chaînes au moyen de LIKE, tous les caractères de la chaîne de modèle sont pris en considération, y compris les espaces à gauche et à droite. Si vous demandez une comparaison qui retourne toutes les lignes contenant une chaîne LIKE « abc  » (abc suivi d'un seul espace), une ligne dont la valeur pour cette colonne est abc (abc sans espace) ne sera pas retournée. Le contraire n'est toutefois pas vrai. Les espaces à droite dont le modèle correspond dans l'expression ne sont pas pris en compte. Si vous demandez une comparaison qui retourne toutes les lignes contenant une chaîne LIKE « abc » (abc sans espace), toutes les lignes commençant par la chaîne abc, qu'elles contiennent ou non des espaces à droite, seront retournées.