SOUNDEX (Transact-SQL)
返回一个由四个字符组成的代码 (SOUNDEX),用于评估两个字符串的相似性。
语法
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 2012 应用了一组更完整的规则。
在升级到兼容级别 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)