SOUNDEX (Transact-SQL)

適用範圍: 是SQL Server (所有支援的版本) 是Azure SQL Database 是Azure SQL 受控執行個體 是Azure Synapse Analytics 是平行處理資料倉儲

傳回四個字元的 (SOUNDEX) 代碼來評估兩個字串的相似度。

主題連結圖示 Transact-SQL 語法慣例

語法

SOUNDEX ( character_expression )  

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

character_expression
為字元資料的英數運算式character_expression 可以是常數、變數或資料行。

傳回型別

varchar

備註

SOUNDEX 會根據字串的英文發音,將英數字串轉換成四個字元的代碼。 代碼的第一個字元是 character_expression 的第一個字元,轉換成大寫。 代碼的第二到第四個字元是數字,代表運算式中的字母。 字母 A、E、I、O、U、H、W 和 Y 除非是字串的第一個字母,否則會忽略它們。 如果需要產生四個字元的代碼,則在尾端加入零。 如需 SOUNDEX 代碼的詳細資訊,請參閱 Soundex 索引系統

不同字串的 SOUNDEX 代碼可以相比較,來查看字串發音相似度。 DIFFERENCE 函數會在兩個字串上執行 SOUNDEX,並傳回整數,表示這些字串的 SOUNDEX 代碼相似度。

SOUNDEX 會區分定序。 字串函數可以是巢狀函數。

SOUNDEX 相容性

在舊版 SQL Server 中,SOUNDEX 函數套用 SOUNDEX 規則的子集。 在資料庫相容性層級 110 或更高層級下,SQL Server 套用一組更完整的規則。

升級到相容性層級 110 或更高層級之後,您可能需要重建使用 SOUNDEX 函式的索引、堆積或 CHECK 條件約束。

  • 在執行 ALTER TABLE <table> REBUILD 陳述式重建堆積之前,無法查詢包含使用 SOUNDEX 定義之保存的計算資料行的堆積。

  • 在升級後,會停用使用 SOUNDEX 定義的 CHECK 條件約束。 若要啟用條件約束,請執行 ALTER TABLE <table> WITH CHECK CHECK CONSTRAINT ALL 陳述式。

  • 如果索引 (包括索引檢視表) 包含使用 SOUNDEX 定義之保存的計算資料行,在執行 ALTER INDEX ALL ON <object> REBUILD 陳述式重建索引之前,將無法查詢這類索引。

範例

下列範例會顯示 SOUNDEX 函數和相關的 DIFFERENCE 函數。 在第一個範例中,傳回所有子音的標準 SOUNDEX 值。 傳回 SOUNDEXSmithSmythe,會傳回相同的 SOUNDEX 結果,因為所有母音、y 字母、雙重字母和 h 字母都不包括在內。

-- Using SOUNDEX  
SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe');  

以下為結果集。 針對 Latin1_General 定序有效。

S530  S530    

DIFFERENCE 函數會比較 SOUNDEX 模式結果的差異。 下列範例會顯示母音不同的兩個字串。 傳回的差異是 4,這是最低的可能差異。

-- Using DIFFERENCE  
SELECT DIFFERENCE('Smithers', 'Smythers');  
GO  

以下為結果集。 針對 Latin1_General 定序有效。

4             

在下列範例中,字串的子音不同;因此,傳回的差異是 2,差異比較大。

SELECT DIFFERENCE('Anothers', 'Brothers');  
GO  

以下為結果集。 針對 Latin1_General 定序有效。

2             

另請參閱

DIFFERENCE (Transact-SQL)
字串函數 (Transact-SQL)
ALTER DATABASE 相容性層級 (Transact-SQL)