次の方法で共有


あいまい文字列一致とは何ですか

適用対象: SQL Server 2025 (17.x) プレビュー Azure SQL DatabaseAzure SQL Managed InstanceSQL データベース

あいまい一致または近似文字列照合を使用して、2 つの文字列が類似しているかどうかを確認し、2 つの文字列の差を計算します。 この機能を使用して、文字の破損が原因で異なる可能性がある文字列を識別します。 破損の原因としては、スペル ミス、文字の入れ替え、文字の欠落、省略形などがあります。 あいまい文字列マッチングでは、アルゴリズムを使用して似た音の文字列を検出します。

  • あいまい文字列の一致は現在プレビュー段階です。
  • SQL Server 2025 (17.x) プレビューで導入されたあいまい文字列照合の SQL Server サポート。

あいまい関数

機能 説明
EDIT_DISTANCE 1 つの文字列を別の文字列に変換するために必要な挿入、削除、置換、および転置の数を計算します。
編集距離類似度 0 (一致がないことを示す) から 100 (完全一致を示す) までの類似性値を計算します。
JARO_WINKLER_DISTANCE 2 つの文字列間の編集距離を計算し、設定されたプレフィックス長の最初から一致する文字列を優先します。
JARO_WINKLER_SIMILARITY 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