SOUNDEX (Transact-SQL)

返回一个由四个字符组成的代码 (SOUNDEX),用于评估两个字符串的相似性。

适用范围:SQL Server(SQL Server 2008 至当前版本)、Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

SOUNDEX ( character_expression )

参数

  • 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 约束。

  • 包含使用 SOUNDEX 定义的持久化计算列的堆无法查询,直到通过运行语句 ALTER TABLE <table> REBUILD 重新生成该堆。

  • 在升级后禁用使用 SOUNDEX 定义的 CHECK 约束。 若要启用该约束,请运行语句 ALTER TABLE <table> WITH CHECK CHECK CONSTRAINT ALL。

  • 包含使用 SOUNDEX 定义的持久化计算列的索引(包括索引视图)无法查询,直到通过运行语句 ALTER INDEX ALL ON <object> REBUILD 重新生成该索引。

示例

以下示例显示了 SOUNDEX 函数及相关的 DIFFERENCE 函数。 在第一个示例中,返回所有辅音字母的标准 SOUNDEX 值。 对 Smith 和 Smythe 运行 SOUNDEX 会返回相同的结果,因为不会包括所有元音字母、字母 y、双写字母和字母 h。

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

下面是结果集:对 Latin1_General 排序规则有效。

----- ----- 
S530  S530  

(1 row(s) affected)

DIFFERENCE 函数用于比较 SOUNDEX 模式结果的差异。 以下示例显示两个仅元音字母不同的字符串。 返回的差异为 4(可能的最小差异)。

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

下面是结果集:对 Latin1_General 排序规则有效。

----------- 
4           

(1 row(s) affected)

在以下示例中,字符串的辅音字母不同;所以,返回的差异为 2,表示差异更大。

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

下面是结果集:对 Latin1_General 排序规则有效。

----------- 
2           

(1 row(s) affected)

请参阅

参考

DIFFERENCE (Transact-SQL)

字符串函数 (Transact-SQL)

ALTER DATABASE 兼容性级别 (Transact-SQL)