다음을 통해 공유


"비정확한 문자열 매칭이란?"

적용 대상: SQL Server 2025(17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

유사하거나 대략적인 문자열 일치를 사용하여 두 문자열이 비슷한지 확인하고 두 문자열 간의 차이를 계산합니다. 이 기능을 사용하여 문자 손상으로 인해 다를 수 있는 문자열을 식별합니다. 손상에는 맞춤법 오류, 변환된 문자, 누락된 문자 또는 약어가 포함됩니다. 유사 항목 문자열 일치는 알고리즘을 사용하여 유사한 소리 문자열을 검색합니다.

Note

퍼지 문자열 일치는 현재 SQL Server 2025(17.x)에 대해 미리 보기 상태로 제공되며, 미리 보기 기능을 지원하는 데이터베이스 범위 구성을 사용하도록 설정해야 합니다.

AZURE SQL Managed Instance에서 SQL Server 2025 또는 Always-up-to-date업데이트 정책을 통해 유사 문자열 매칭을 사용할 수 있습니다.

퍼지 함수

Function Description
EDIT_DISTANCE 한 문자열을 다른 문자열로 변환하는 데 필요한 삽입, 삭제, 대체 및 트랜스포지션 수를 계산합니다.
EDIT_DISTANCE_SIMILARITY 0에서 100(전체 일치를 나타낸)까지의 유사성 값을 계산합니다.
JARO_WINKLER_DISTANCE 설정된 접두사 길이에 대해 처음부터 일치하는 문자열에 대한 기본 설정을 제공하는 두 문자열 간의 편집 거리를 계산합니다.
JARO_WINKLER_SIMILARITY 0에서 100(전체 일치를 나타낸)까지의 유사성 값을 계산합니다.

Note

현재 함수는 대/소문자 구분 안 함 및 기타 데이터 정렬 관련 규칙과 같이 데이터 정렬 설정에서 정의한 비교 의미 체계를 준수하지 않습니다. 데이터 정렬 규칙에 대한 지원이 구현되면 함수의 출력은 이러한 의미 체계를 반영하고 그에 따라 변경될 수 있습니다.

Examples

다음 예제에서는 유사 문자열 일치 함수를 보여 줍니다.

예제 테이블

예제 쿼리를 실행하기 전에 예제 테이블을 만들고 채웁니다.

예제 테이블을 만들고 채하려면 비프로덕션 사용자 데이터베이스에 연결하고 다음 스크립트를 실행합니다.

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

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

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

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

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

모든 함수를 사용하는 예제 쿼리

다음 쿼리는 현재 사용할 수 있는 모든 정규식 함수를 보여 줍니다.

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

청소

예제 데이터 사용을 완료한 후 예제 테이블을 삭제합니다.

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