Почему SOUNDEX SQL Server дает противоречивые результаты?

Может ли кто-нибудь дать некоторое представление о том, почему SOUNDEX дает разные результаты, когда некоторые символы пишутся с заглавной буквы по сравнению с нижним регистром? Судя по тому, что я читал в Интернете, SOUNDEX игнорирует регистр, но я получаю разные результаты и не могу понять, что могло бы вызвать различия. Я не могу воспроизвести этот пример с помощью слова вроде GUTTHRE.

Query                                  Result
select SOUNDEX('JESCHKE')              J200      <-- 200
select SOUNDEX(LOWER('JESCHKE'))       J220
select SOUNDEX('Jeschke')              J220
select SOUNDEX('jeschke')              J220
select SOUNDEX('JESChKE')              J220
select SOUNDEX('JESCHke')              J200      <-- for some reason capitalizing 'H' changes the result to 200
select SOUNDEX('jescHke')              J200      <-- 200

Есть идеи, почему значения не совпадают?


person Martin Bobak    schedule 20.08.2020    source источник
comment
Какую версию SQL Server вы используете?   -  person DeanOC    schedule 21.08.2020
comment
Я использую Azure SQL Server v12.0   -  person Martin Bobak    schedule 21.08.2020
comment
SOUNDEX - это сопоставление чувствительный. Но в документации не описано, как именно сортировка влияет на результат.   -  person AlwaysLearning    schedule 21.08.2020
comment
У меня такая же проблема!   -  person Pat Doyle    schedule 21.08.2020
comment
@AlwaysLearning, так что похоже, что регистр может быть частью чувствительности сортировки ... когда я прочитал, что рассматривал только порядок и акценты.   -  person Martin Bobak    schedule 21.08.2020
comment
Кстати, правильный результат - J200   -  person dnoeth    schedule 21.08.2020
comment
Ссылка на правила soundex настоятельно предполагает, что регистр символов не имеет значения: archives.gov/ research / census / soundex.   -  person Gordon Linoff    schedule 21.08.2020


Ответы (1)


Итак, в wiki говорится:

две буквы с одинаковым числом, разделенные 'h' или 'w', кодируются как одно число

Поэтому я думаю, что это применимо, когда вы используете строчную букву h, поэтому S кодируется как 2, а все остальные символы будут кодироваться как 2 и игнорируются в соответствии с:

Если две или более букв с одинаковым номером соседствуют в исходном имени (до шага 1), сохраните только первую букву.

Я подозреваю, что из-за того, что буква H написана с заглавной буквы, это правило сбрасывается, и следующий k затем кодируется как еще 2.

person Steve Ford    schedule 21.08.2020