Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2025 (17.x) Anteprima
del database
SQL di Azure Istanza
gestita di SQL di Azurein Microsoft Fabric
Usare la corrispondenza di stringhe fuzzy, o approssimativa, per verificare se due stringhe sono simili e calcolare la differenza tra di esse. Usare questa funzionalità per identificare le stringhe che possono essere diverse a causa del danneggiamento del carattere. Le cause del danneggiamento possono includere errori di ortografia, caratteri trasposti, caratteri mancanti o abbreviazioni. La corrispondenza di stringhe fuzzy usa algoritmi per rilevare stringhe simili nel suono.
Annotazioni
- La corrispondenza tra stringhe approssimative è attualmente in versione di test.
- Supporto di SQL Server per la corrispondenza di stringhe fuzzy introdotto nella versione di anteprima di SQL Server 2025 (17.x).
- La corrispondenza di stringhe fuzzy è disponibile nell'Istanza gestita SQL di Azure configurata con i criteri di aggiornamento always-up-to-date.
Funzioni fuzzy
Funzione | Descrizione |
---|---|
EDIT_DISTANCE | Calcola il numero di inserimenti, eliminazioni, sostituzioni e trasposizioni necessari per trasformare una stringa in un'altra. |
SIMILARITÀ DELLA DISTANZA DI MODIFICA | Calcola un valore di somiglianza compreso tra 0 (che indica nessuna corrispondenza) e 100 (che indica la corrispondenza completa). |
JARO_WINKLER_DISTANCE | Calcola la distanza di modifica tra due stringhe, dando la preferenza alle stringhe che coincidono dall'inizio per una lunghezza di prefisso determinata. |
JARO_WINKLER_SIMILARITY | Calcola un valore di somiglianza compreso tra 0 (che indica nessuna corrispondenza) e 1 (che indica la corrispondenza completa). |
Annotazioni
Attualmente, le funzioni non rispettano la semantica di confronto definita dalle impostazioni di confronto, come l'insensibilità alle maiuscole e altre regole specifiche di confronto. Una volta implementato il supporto per le regole di confronto, l'output delle funzioni rifletterà queste semantiche e potrebbe cambiare di conseguenza.
Esempi
Gli esempi seguenti illustrano le funzioni di corrispondenza di stringhe fuzzy.
Tabella di esempio
Prima di poter eseguire query di esempio, creare e popolare una tabella di esempio.
Per creare e popolare la tabella di esempio, connettersi a un database utente non di produzione ed eseguire lo script seguente:
-- Step 1: Create the table
CREATE TABLE WordPairs (
WordID INT IDENTITY(1,1) PRIMARY KEY, -- Auto-incrementing ID
WordUK NVARCHAR(50), -- UK English word
WordUS NVARCHAR(50) -- US English word
);
-- Step 2: Insert the data
INSERT INTO WordPairs (WordUK, WordUS) VALUES
('Colour', 'Color'),
('Flavour', 'Flavor'),
('Centre', 'Center'),
('Theatre', 'Theater'),
('Organise', 'Organize'),
('Analyse', 'Analyze'),
('Catalogue', 'Catalog'),
('Programme', 'Program'),
('Metre', 'Meter'),
('Honour', 'Honor'),
('Neighbour', 'Neighbor'),
('Travelling', 'Traveling'),
('Grey', 'Gray'),
('Defence', 'Defense'),
('Practise', 'Practice'), -- Verb form in UK
('Practice', 'Practice'), -- Noun form in both
('Aluminium', 'Aluminum'),
('Cheque', 'Check'); -- Bank cheque vs. check
EDIT_DISTANCE di esempio
SELECT WordUK, WordUS, EDIT_DISTANCE(WordUK, WordUS) AS Distance
FROM WordPairs
WHERE EDIT_DISTANCE(WordUK, WordUS) <= 2
ORDER BY Distance ASC;
Restituisce:
WordUK WordUS Distance
------------------------------ ------------------------------ -----------
Practice Practice 0
Aluminium Aluminum 1
Honour Honor 1
Neighbour Neighbor 1
Travelling Traveling 1
Grey Gray 1
Defence Defense 1
Practise Practice 1
Colour Color 1
Flavour Flavor 1
Organise Organize 1
Analyse Analyze 1
Catalogue Catalog 2
Programme Program 2
Metre Meter 2
Centre Center 2
Theatre Theater 2
Esempio EDIT_DISTANCE_SIMILARITY
SELECT WordUK, WordUS, EDIT_DISTANCE_SIMILARITY(WordUK, WordUS) AS Similarity
FROM WordPairs
WHERE EDIT_DISTANCE_SIMILARITY(WordUK, WordUS) >=75
ORDER BY Similarity DESC;
Restituisce:
WordUK WordUS Similarity
------------------------------ ------------------------------ -----------
Practice Practice 100
Travelling Traveling 90
Aluminium Aluminum 89
Neighbour Neighbor 89
Organise Organize 88
Practise Practice 88
Defence Defense 86
Analyse Analyze 86
Flavour Flavor 86
Colour Color 83
Honour Honor 83
Catalogue Catalog 78
Programme Program 78
Grey Gray 75
Esempio JARO_WINKLER_DISTANCE
SELECT WordUK, WordUS, JARO_WINKLER_DISTANCE(WordUK, WordUS) AS Distance
FROM WordPairs
WHERE JARO_WINKLER_DISTANCE(WordUK, WordUS) <= .05
ORDER BY Distance ASC;
Restituisce:
WordUK WordUS Distance
------------------------------ ------------------------------ -----------
Practice Practice 0
Travelling Traveling 0.01999998
Neighbour Neighbor 0.02222222
Aluminium Aluminum 0.02222222
Theatre Theater 0.02857143
Flavour Flavor 0.02857143
Centre Center 0.03333336
Colour Color 0.03333336
Honour Honor 0.03333336
Catalogue Catalog 0.04444444
Programme Program 0.04444444
Metre Meter 0.04666668
Esempio JARO_WINKLER_SIMILARITY
SELECT WordUK, WordUS, JARO_WINKLER_SIMILARITY(WordUK, WordUS) AS Similarity
FROM WordPairs
WHERE JARO_WINKLER_SIMILARITY(WordUK, WordUS) > 0.9
ORDER BY Similarity DESC;
Restituisce:
WordUK WordUS Similarity
------------------------------ ------------------------------ -----------
Practice Practice 1
Travelling Traveling 0.98
Neighbour Neighbor 0.9777778
Aluminium Aluminum 0.9777778
Flavour Flavor 0.9714286
Theatre Theater 0.9714286
Centre Center 0.9666666
Colour Color 0.9666666
Honour Honor 0.9666666
Catalogue Catalog 0.9555556
Programme Program 0.9555556
Metre Meter 0.9533333
Organise Organize 0.95
Practise Practice 0.95
Defence Defense 0.9428572
Analyse Analyze 0.9428572
Query di esempio con tutte le funzioni
La query seguente illustra tutte le funzioni di espressione regolare attualmente disponibili.
SELECT T.source_string,
T.target_string,
EDIT_DISTANCE(T.source_string, T.target_string) as ED_Distance,
JARO_WINKLER_DISTANCE(T.source_string, T.target_string) as JW_Distance,
EDIT_DISTANCE_SIMILARITY(T.source_string, T.target_string) as ED_Similarity,
CAST(JARO_WINKLER_SIMILARITY(T.source_string, T.target_string)*100 as int) as JW_Similarity
FROM (VALUES('Black', 'Red'),
('Colour', 'Yellow'),
('Colour', 'Color'),
('Microsoft', 'Msft'),
('Regex', 'Regex')) as T(source_string, target_string);
Restituisce:
source_string target_string ED_Distance JW_Distance ED_Similarity JW_Similarity
-------------- -------------- -------------- -------------- -------------- --------------
Black Red 5 1 0 0
Colour Yellow 5 0.4444444 17 55
Colour Color 1 0.03333336 83 96
Microsoft Msft 5 0.4916667 44 50
Regex Regex 0 0 100 100
Pulizia
Al termine dell'uso dei dati di esempio, eliminare la tabella di esempio.
IF OBJECT_ID('dbo.WordPairs', 'U') IS NOT NULL
BEGIN
DROP TABLE dbo.WordPairs;
END