.Guida

In SQL Server, è possibile utilizzare la funzione T-SQLPATINDEX() per trovare un modello all’interno di una stringa. In particolare, la funzione restituisce solo la prima occorrenza del modello all’interno della stringa.

La funzione accetta due argomenti; il modello e la stringa.

È possibile utilizzare caratteri jolly all’interno del modello.

Sintassi

La sintassi va così:

PATINDEX ( '%pattern%' , expression )

Dove pattern è un’espressione di carattere che contiene la sequenza da trovare e expression è l’espressione da cercare.

Esempio 1 – Utilizzo di Base

Ecco un esempio di come funziona:

SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;

Risultato:

+----------+| Result ||----------|| 12 |+----------+

Il segno di percentuale (%) è un carattere jolly che rappresenta una stringa di zero o più caratteri.

Esempio 2-Nessuna corrispondenza

Ecco cosa succede quando non includiamo i caratteri jolly:

SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;

Risultato:

+----------+| Result ||----------|| 0 |+----------+

anche se, se la stringa corrisponde al modello senza caratteri jolly, avrete un risultato:

SELECT PATINDEX('Bob', 'Bob') AS Result;

Risultato:

+----------+| Result ||----------|| 1 |+----------+

Tuttavia, non si ottiene una partita se la stringa contiene più caratteri:

SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;

Risultato:

+----------+| Result ||----------|| 0 |+----------+

In quale caso è possibile utilizzare un singolo carattere jolly:

SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;

Risultato:

+----------+| Result ||----------|| 1 |+----------+

È anche possibile utilizzare un singolo carattere jolly da qualche parte nel mezzo del modello:

SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;

Risultato:

+----------+| Result ||----------|| 1 |+----------+

In questo caso abbiamo avuto un match perché l’inizio e la fine della stringa abbinato l’inizio e la fine del modello. Naturalmente, il centro della stringa corrisponde anche al centro del modello, perché tutti gli altri caratteri sono coperti dal segno percentuale.

Esempio 3 – Il carattere jolly di sottolineatura

Ecco un altro esempio in cui introduciamo un altro carattere jolly:

SELECT PATINDEX('B_er', 'Beer') AS Result;

Risultato:

+----------+| Result ||----------|| 1 |+----------+

Il carattere di sottolineatura (_) che è un carattere jolly per ogni singolo carattere. Pertanto, corrisponderà solo se c’è esattamente un carattere in quella posizione.

Naturalmente, il modello sopra potrebbe corrispondere a molte stringhe diverse. Ad esempio:

SELECT PATINDEX('B_er', 'Beer') AS 'Beer', PATINDEX('B_er', 'Bier') AS 'Bier', PATINDEX('B_er', 'Baer') AS 'Baer', PATINDEX('B_er', 'B er') AS 'B er';

Risultato:

+--------+--------+--------+--------+| Beer | Bier | Baer | B er ||--------+--------+--------+--------|| 1 | 1 | 1 | 1 |+--------+--------+--------+--------+

Esempio 4 – Confrontando i caratteri jolly _ e %

Questo esempio dimostra la differenza tra i caratteri jolly _e %.

SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';

Risultato:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+

Il carattere di sottolineatura corrisponde solo quando c’è esattamente un carattere in quella posizione. Per abbinare due caratteri, dobbiamo usare due caratteri di sottolineatura.

Il segno percentuale d’altra parte, corrisponde a qualsiasi numero di caratteri, incluso zero, come visto nel seguente esempio:

SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';

Risultato:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 0 |+-----+-----+------+

Esempio 5 – Un Esempio di Database

Ecco un esempio di utilizzo di questa funzione in una query di database:

USE Music;SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM AlbumsWHERE PATINDEX('%the%', AlbumName) > 0;

Risultato:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || No Prayer for the Dying | 15 || The Sixteen Men of Tain | 1 |+-------------------------+-----------------+

In questo caso uso il WHERE clausola per la restituzione solo di quegli album che in realtà corrispondono, insieme con il loro PATINDEX() risultato. Se ho lasciato cadere la clausolaWHERE, tutti gli album sarebbero stati restituiti, indipendentemente dal fatto che corrispondessero o meno.

Per quelli che non corrispondevano, il risultato PATINDEX() sarebbe zero.

USE Music;SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM Albums;

Risultato:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Powerslave | 0 || Powerage | 0 || Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || Casualties of Cool | 0 || Epicloud | 0 || Somewhere in Time | 0 || Piece of Mind | 0 || Killers | 0 || No Prayer for the Dying | 15 |+-------------------------+-----------------+

Esempio 6 – Prima Occorrenza Solo

Come detto, PATINDEX() restituisce solo la prima occorrenza del pattern all’interno della stringa.

SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;

Risultato:

+----------+| Result ||----------|| 5 |+----------+

La funzione CHARINDEX ()

La funzione T-SQL CHARINDEX() è simile a PATINDEX(). Tuttavia, ci sono alcune differenze tra i due. In particolare,PATINDEX() accetta caratteri jolly, ma non una posizione iniziale. CHARINDEX() d’altra parte accetta una posizione iniziale, ma non caratteri jolly.

Related Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *