Compartir a través de


¿Qué es la coincidencia difusa de cadenas?

Se aplica a: SQL Server 2025 (17.x) Versión preliminar de la base de datos SQL de Azure SQL Database deAzure SQL Managed Instanceen Microsoft Fabric

Utiliza coincidencia difusa o aproximada de cadenas para comprobar si dos cadenas son similares y calcular la diferencia entre ellas. Use esta funcionalidad para identificar cadenas que pueden ser diferentes debido a daños en los caracteres. Las causas de la corrupción pueden incluir errores ortográficos, caracteres transpuestos, caracteres que faltan o abreviaturas. La coincidencia difusa de cadenas utiliza algoritmos para detectar cadenas textualmente similares.

Nota:

  • La coincidencia difusa de cadenas de texto está actualmente en versión preliminar.
  • Soporte de SQL Server para la coincidencia de cadenas aproximadas introducido en la versión preliminar de SQL Server 2025 (17.x).

Funciones difusas

Función Descripción
EDIT_DISTANCE Calcula el número de inserciones, eliminaciones, sustituciones y transposiciones necesarias para transformar una cadena a otra.
EDIT_DISTANCE_SIMILARITY Calcula un valor de similitud comprendido entre 0 (que indica ninguna coincidencia) y 100 (lo que indica la coincidencia completa).
JARO_WINKLER_DISTANCE Calcula la distancia de edición entre dos cadenas que dan preferencia a las cadenas que coinciden desde el principio para una longitud de prefijo establecida.
JARO_WINKLER_SIMILARITY Calcula un valor de similitud comprendido entre 0 (que indica ninguna coincidencia) a 1 (lo que indica la coincidencia completa).

Nota:

Actualmente, las funciones no se adhieren a la semántica de comparación definida por la configuración de intercalación, como la insensibilidad a mayúsculas y minúsculas y otras reglas específicas de intercalación. Una vez implementada la compatibilidad con las reglas de intercalación, la salida de las funciones reflejará esta semántica y puede cambiar en consecuencia.

Ejemplos

Los siguientes ejemplos demuestran las funciones de coincidencia difusa de cadenas.

Tabla de ejemplo

Para poder ejecutar consultas de ejemplo, cree y rellene una tabla de ejemplo.

Para crear y rellenar la tabla de ejemplo, conéctese a una base de datos de usuario que no sea de producción y ejecute el siguiente script:

-- 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

Ejemplo EDIT_DISTANCE

SELECT WordUK, WordUS, EDIT_DISTANCE(WordUK, WordUS) AS Distance
FROM WordPairs
WHERE EDIT_DISTANCE(WordUK, WordUS) <= 2
ORDER BY Distance ASC;

Devoluciones:

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

Ejemplo 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;

Devoluciones:

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

Ejemplo 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;

Devoluciones:

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

Ejemplo 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;

Devoluciones:

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

Consulta de ejemplo con todas las funciones

En la consulta siguiente se muestran todas las funciones de expresión regular disponibles actualmente.

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);

Devoluciones:

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

Limpieza

Una vez que haya terminado de usar los datos de ejemplo, elimine la tabla de ejemplo.

IF OBJECT_ID('dbo.WordPairs', 'U') IS NOT NULL
BEGIN
    DROP TABLE dbo.WordPairs;
END