- 类别:
字符串和二进制函数 (匹配/比较)
EDITDISTANCE¶
计算两个输入字符串之间的 Levenshtein 距离。它是将一个字符串转换为另一个字符串所需的单字符插入、删除或替换的数量。
备注
与其他指标(例如 Damerau-Levenshtein 距离)不同,不考虑字符换位。
语法¶
EDITDISTANCE( <string_expr1> , <string_expr2> [, <max_distance> ] )
实参¶
必填:
string_expr1
、.string_expr2
输入字符串。
可选:
max_distance
指定要计算的最大距离的整数表达式。
当字符串之间的距离超过这个数字时,函数将停止计算距离,只返回最大距离。
指定此实参与调用
LEAST( EDITDISTANCE( string_expr1, string_expr2 ), max_distance )
的效果相同。如果指定一个负数(即
-n
),函数将使用0
作为最大距离并返回0
。
使用说明¶
EDITDISTANCE 函数的执行时间与输入字符串长度的乘积成正比。
为了获得更好的性能,Snowflake 建议使用不超过 4096 个字符的输入字符串。
还可以使用可选的
max_distance
实参为计算的距离设置上限。
排序规则详细信息¶
No impact. In languages where the alphabet contains digraphs or trigraphs (such as "Dz" and "Dzs" in Hungarian), each character in each digraph and trigraph is treated as an independent character, not as part of a single multi-character letter.
结果仅基于字符串中的字符,而不基于字符串的排序规则规范。
示例¶
以下示例计算表 ed
中 s
列和 t
列中字符串之间的距离。
最后两列使用 max_distance
实参指定要计算的最大距离:
当
max_distance
为3
时,如果字符串之间的距离大于或等于 3,函数将返回3
(如下所示)。如果
max_distance
是负数(例如-1
,如下所示),则该函数使用0
作为最大距离并返回0
。
SELECT s, t, EDITDISTANCE(s, t), EDITDISTANCE(t, s), EDITDISTANCE(s, t, 3), EDITDISTANCE(s, t, -1) FROM ed;
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
S | T | EDITDISTANCE(S, T) | EDITDISTANCE(T, S) | EDITDISTANCE(S, T, 3) | EDITDISTANCE(S, T, -1) |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------|
| | 0 | 0 | 0 | 0 |
Gute nacht | Ich weis nicht | 8 | 8 | 3 | 0 |
Ich weiß nicht | Ich wei? nicht | 1 | 1 | 1 | 0 |
Ich weiß nicht | Ich weiss nicht | 2 | 2 | 2 | 0 |
Ich weiß nicht | [NULL] | [NULL] | [NULL] | [NULL] | [NULL] |
Snowflake | Oracle | 7 | 7 | 3 | 0 |
święta | swieta | 2 | 2 | 2 | 0 |
[NULL] | | [NULL] | [NULL] | [NULL] | [NULL] |
[NULL] | [NULL] | [NULL] | [NULL] | [NULL] | [NULL] |
----------------+-----------------+--------------------+--------------------+-----------------------+------------------------+
如果两个字符串之间的距离至少为 2,下一个示例将返回 FALSE
。因为 max_distance
被指定为 2
,所以一旦确定距离至少为 2,该函数将停止计算距离。(输入字符串之间的实际距离是 6。)
SELECT EDITDISTANCE('future', 'past', 2) < 2;
+---------------------------------------+
| EDITDISTANCE('FUTURE', 'PAST', 2) < 2 |
|---------------------------------------|
| False |
+---------------------------------------+