Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2025 (17.x)
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
banco de dados SQL no Microsoft Fabric
Use correspondência de cadeia de caracteres difusa ou aproximada para verificar se duas cadeias de caracteres são semelhantes e calcular a diferença entre duas cadeias de caracteres. Use essa funcionalidade para identificar cadeias de caracteres que podem ser diferentes devido à corrupção de caracteres. Corrupção inclui erros de ortografia, caracteres transpostos, caracteres ausentes ou abreviações. A correspondência de cadeia de caracteres difusa usa algoritmos para detectar cadeias de caracteres semelhantes.
Note
A correspondência de cadeia de caracteres difusa está atualmente em versão prévia do SQL Server 2025 (17.x) e requer a habilitação da configuração com escopo do banco de dados de recursos de visualização.
A correspondência de cadeia de caracteres difusa está disponível na Instância Gerenciada de SQL do Azure com a política de atualização do SQL Server 2025 ou Always-up-to-date.
Funções difusas
| Function | Description |
|---|---|
| EDIT_DISTANCE | Calcula o número de inserções, exclusões, substituições e transposições necessárias para transformar uma cadeia de caracteres em outra. |
| EDIT_DISTANCE_SIMILARITY | Calcula um valor de similaridade que varia de 0 (indicando nenhuma correspondência) a 100 (indicando correspondência completa). |
| JARO_WINKLER_DISTANCE | Calcula a distância de edição entre duas cadeias de caracteres, dando preferência a cadeias de caracteres que correspondem desde o início para um comprimento de prefixo definido. |
| JARO_WINKLER_SIMILARITY | Calcula um valor de similaridade que varia de 0 (indicando nenhuma correspondência) a 100 (indicando correspondência completa). |
Note
Atualmente, as funções não aderem à semântica de comparação definida pelas configurações de ordenação, como sensibilidade a maiúsculas e minúsculas e outras regras específicas de ordenação. Depois que o suporte para regras de ordenação for implementado, a saída das funções refletirá essas semânticas e poderá mudar conforme necessário.
Examples
Os exemplos a seguir demonstram as funções de correspondência de cadeia de caracteres difusas.
Tabela de exemplo
Antes de executar consultas de exemplo, crie e preencha uma tabela de exemplo.
Para criar e preencher a tabela de exemplo, conecte-se a um banco de dados de usuário que não seja de produção e execute o seguinte 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
Exemplo EDIT_DISTANCE
SELECT WordUK,
WordUS,
EDIT_DISTANCE(WordUK, WordUS) AS Distance
FROM WordPairs
WHERE EDIT_DISTANCE(WordUK, WordUS) <= 2
ORDER BY Distance ASC;
Returns:
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
Exemplo 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;
Returns:
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
Exemplo 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;
Returns:
WordUK WordUS Distance
------------------------------ ------------------------------ -----------
Practice Practice 0
Travelling Traveling 0.02
Neighbour Neighbor 0.0222222222222223
Aluminium Aluminum 0.0222222222222223
Theatre Theater 0.0285714285714286
Flavour Flavor 0.0285714285714286
Centre Center 0.0333333333333333
Colour Color 0.0333333333333333
Honour Honor 0.0333333333333333
Catalogue Catalog 0.0444444444444444
Programme Program 0.0444444444444444
Metre Meter 0.0466666666666667
Exemplo JARO_WINKLER_SIMILARITY
SELECT WordUK,
WordUS,
JARO_WINKLER_SIMILARITY(WordUK, WordUS) AS Similarity
FROM WordPairs
WHERE JARO_WINKLER_SIMILARITY(WordUK, WordUS) > 90
ORDER BY Similarity DESC;
Returns:
WordUK WordUS Similarity
------------------------------ ------------------------------ -----------
Practice Practice 100
Aluminium Aluminum 98
Neighbour Neighbor 98
Travelling Traveling 98
Colour Color 97
Flavour Flavor 97
Centre Center 97
Theatre Theater 97
Honour Honor 97
Catalogue Catalog 96
Programme Program 96
Metre Meter 95
Organise Organize 95
Practise Practice 95
Analyse Analyze 94
Defence Defense 94
Consulta de exemplo com todas as funções
A consulta a seguir demonstra todas as funções de expressão regular disponíveis no momento.
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,
JARO_WINKLER_SIMILARITY(T.source_string, T.target_string) AS JW_Similarity
FROM (VALUES ('Black', 'Red'),
('Colour', 'Yellow'),
('Colour', 'Color'),
('Microsoft', 'Msft'),
('Regex', 'Regex')
) AS T(source_string, target_string);
Returns:
source_string target_string ED_Distance JW_Distance ED_Similarity JW_Similarity
-------------- -------------- -------------- --------------------- -------------- --------------
Black Red 5 1 0 0
Colour Yellow 5 0.444444444444445 17 55
Colour Color 1 0.0333333333333333 83 96
Microsoft Msft 5 0.491666666666667 44 50
Regex Regex 0 0 100 100
Limpeza
Depois de terminar de usar os dados de exemplo, exclua a tabela de exemplo:
IF OBJECT_ID('dbo.WordPairs', 'U') IS NOT NULL
BEGIN
DROP TABLE dbo.WordPairs;
END