Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2025 (17.x) — предварительная версия
базы данных
SQLAzure Для Управляемого экземпляра
SQL Azureв Microsoft Fabric
Используйте нечеткое или приблизительное сопоставление строк, чтобы проверить, похожи ли две строки, и вычислить разницу между двумя строками. Используйте эту возможность для идентификации строк, которые могут отличаться из-за повреждения символов. Причины повреждения могут включать ошибки орфографии, транспонированные символы, отсутствующие символы или сокращенные символы. Нечеткое сопоставление строк использует алгоритмы для обнаружения похожих строк.
Замечание
- Сопоставление нечеткой строки в настоящее время находится в предварительной версии.
- Поддержка sql Server для сопоставления нечетких строк, появилась в предварительной версии SQL Server 2025 (17.x).
- Нечеткое сопоставление строк доступно в Управляемом экземпляре Azure SQL, настроенном с политикой обновления Always-up-to-date.
Нечеткие функции
Функция | Описание |
---|---|
EDIT_DISTANCE | Вычисляет количество вставок, удалений, подстановок и транспозиций, необходимых для преобразования одной строки в другую. |
Схожесть по редакционному расстоянию | Вычисляет значение сходства от 0 (указывающее отсутствие совпадения) до 100 (указывающее полное совпадение). |
Расстояние Яро-Винклера | Вычисляет расстояние редактирования между двумя строками, предоставляя предпочтение строкам, которые соответствуют началу для заданной длины префикса. |
Схожесть по Jaro-Winkler | Вычисляет значение сходства от 0 (указывающее отсутствие совпадения) до 1 (указывающее полное совпадение). |
Замечание
В настоящее время функции не соответствуют семантике сравнения, определенной параметрами сортировки, например без учета регистра и других правил сортировки. После реализации поддержки правил сортировки выходные данные функций будут отражать эти семантики и могут соответствующим образом измениться.
Примеры
В следующих примерах показаны нечеткие функции сопоставления строк.
Пример таблицы
Прежде чем выполнять примеры запросов, создайте и заполните пример таблицы.
Чтобы создать и заполнить пример таблицы, подключитесь к непроизводной пользовательской базе данных и запустите следующий скрипт:
-- 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
SELECT WordUK, WordUS, EDIT_DISTANCE(WordUK, WordUS) AS Distance
FROM WordPairs
WHERE EDIT_DISTANCE(WordUK, WordUS) <= 2
ORDER BY Distance ASC;
Возвращает:
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
Пример 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;
Возвращает:
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
Пример 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;
Возвращает:
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
Пример 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;
Возвращает:
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
Пример запроса со всеми функциями
Следующий запрос демонстрирует все доступные функции регулярного выражения.
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);
Возвращает:
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
Очистка
После завершения работы с примерами данных удалите пример таблицы.
IF OBJECT_ID('dbo.WordPairs', 'U') IS NOT NULL
BEGIN
DROP TABLE dbo.WordPairs;
END