Criteri di ricerca nelle condizioni di ricerca

La parola chiave LIKE esegue la ricerca dei valori di tipo carattere, data e ora corrispondenti al modello specificato. Per ulteriori informazioni, vedere Tipi di dati (Transact-SQL). Per definire il modello con cui vengono confrontati i valori, la parola chiave LIKE utilizza un'espressione regolare. Il modello specificato include la stringa di caratteri di cui eseguire la ricerca, che a sua volta può includere una combinazione dei caratteri jolly descritti di seguito.

Carattere jolly

Descrizione

%

Stringa composta da zero o più caratteri.

_

Carattere singolo.

[ ]

Carattere singolo compreso nell'intervallo ([a-f]) o nel set ([abcdef]) specificato.

[^]

Carattere singolo non compreso nell'intervallo ([^a - f]) o nel set ([^abcdef]) specificato.

Racchiudere i caratteri jolly e la stringa di caratteri tra virgolette singole, ad esempio:

  • LIKE 'Mc%' cerca tutte le stringhe che iniziano con le lettere Mc (McBadden).

  • LIKE '%inger' cerca tutte le stringhe che terminano con le lettere inger (Ringer, Stringer).

  • LIKE '%en%' cerca tutte le stringhe che contengono le lettere en (Bennet, Green, McBadden).

  • LIKE '_heryl' cerca tutti i nomi di sei lettere che terminano con le lettere heryl (Cheryl, Sheryl).

  • LIKE '[CK]ars[eo]n' cerca i nomi Carsen, Karsen, Carson e Karson (Carson).

  • LIKE '[M-Z]inger' cerca tutti i nomi che terminano con le lettere inger e che iniziano con una lettera compresa tra M e Z (Ringer).

  • LIKE 'M[^c]%' cerca tutti i nomi che iniziano con la lettera M e la cui seconda lettera è diversa da c (MacFeather).

La query seguente individua tutti i numeri di telefono della tabella Contact con indicativo di località uguale a 415:

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

È possibile utilizzare NOT LIKE con gli stessi caratteri jolly. Per trovare tutti i numeri di telefono della tabella Contact con indicativi di località diversi da 415, utilizzare una delle query equivalenti seguenti:

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

-- Or

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

La clausola IS NOT NULL può essere utilizzata con i caratteri jolly e la clausola LIKE. Ad esempio, la query seguente recupera i numeri di telefono della tabella Contact che iniziano con 415 e IS NOT NULL:

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

L'output delle istruzioni che includono la parola chiave LIKE varia in base al tipo di ordinamento selezionato durante l'installazione. Per ulteriori informazioni sugli effetti dei diversi tipi di ordinamento, vedere Utilizzo delle regole di confronto.

Le uniche condizioni WHERE che è possibile applicare alle colonne di tipo text sono LIKE, IS NULL o PATINDEX.

I caratteri jolly utilizzati senza LIKE vengono interpretati come costanti anziché come criteri di ricerca, ovvero rappresentano solo i rispettivi valori. La query seguente tenta di individuare tutti i numeri di telefono composti solo dai quattro caratteri 415%. Non individuerà i numeri che iniziano con 415. Per ulteriori informazioni sulle costanti, vedere Costanti (Motore di database).

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

Per l'utilizzo dei caratteri jolly è inoltre necessario tenere presente un'osservazione importante relativa all'effetto sulle prestazioni. Se l'espressione inizia con un carattere jolly, non è possibile utilizzare un indice. Analogamente, in una rubrica non sarebbe possibile cercare il nome '%mith' anziché 'Smith'. Un carattere jolly all'interno o alla fine di un'espressione non preclude l'utilizzo di un indice. Analogamente, in una rubrica telefonica, sarebbe possibile cercare il nome 'Samuel%', indipendentemente dal fatto che la rubrica includa sia Samuels che Samuelson.

Ricerca di caratteri jolly

È possibile eseguire la ricerca di caratteri jolly. Per specificare un carattere che in genere viene utilizzato come carattere jolly, è possibile procedere in due modi:

  • Utilizzare la parola chiave ESCAPE per definire un carattere di escape. Quando il carattere di escape precede il carattere jolly all'interno del criterio di ricerca, il carattere jolly viene interpretato come un carattere normale. Ad esempio, per cercare la stringa 5% in qualsiasi posizione all'interno di una stringa, utilizzare il codice seguente:

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

    In questa clausola LIKE i segni di percentuale iniziale e finale (%) vengono interpretati come caratteri jolly e il segno di percentuale preceduto da uno slash (/) viene interpretato come il carattere %.

  • Utilizzare le parentesi quadre ([ ]) per racchiudere il carattere jolly. Per cercare un segno meno (-), anziché utilizzarlo per specificare un intervallo di ricerca, inserire il segno meno come primo carattere all'interno di parentesi:

    WHERE ColumnA LIKE '9[-]5'
    

    Nella tabella seguente viene illustrato l'utilizzo dei caratteri jolly tra parentesi quadre.

    Simbolo

    Descrizione

    LIKE '5[%]'

    5%

    LIKE '5%'

    5 seguito da una stringa composta da 0 o più caratteri

    LIKE '[_]n'

    _n

    LIKE '_n'

    an, in, on (e così via)

    LIKE '[a-cdf]'

    a, b, c, d o f

    LIKE '[-acdf]'

    -, a, c, d o f

    LIKE '[ [ ]'

    [

    LIKE ']'

    ]

Se i confronti di stringhe vengono eseguiti con la parola chiave LIKE, sono rilevanti tutti i caratteri della stringa modello, compresi gli spazi iniziali e/o finali. Se è necessario un confronto per restituire tutte le righe con una stringa LIKE 'abc ' (stringa abc seguita da uno spazio singolo), non viene restituita una riga nella quale il valore di quella colonna è abc (abc senza spazio). Non è vero tuttavia il caso contrario, ovvero gli spazi finali dell'espressione confrontata con il modello vengono ignorati. Se è necessario un confronto per restituire tutte le righe con una stringa LIKE 'abc' (stringa abc senza spazio), vengono restituite tutte le righe che iniziano con abc e includono zero o più spazi vuoti finali.