Soundex er en fonetisk algoritme til at indeksere navne efter lyd, som udtales på engelsk. Det blev udviklet og patenteret i 1918 og 1922.
En af de tilgængelige funktioner i SQL Server er SOUNDEX()
funktion, som returnerer Soundex-koden for en given streng.
Syntaks
Syntaksen ser sådan ud:
SOUNDEX ( character_expression )
Hvor character_expression
er det ord eller den streng, som du vil have Soundex-koden til. Dette kan være en konstant, variabel eller kolonne.
SOUNDEX()
funktionen er sorteringsfølsom, og strengfunktioner kan indlejres.
Soundex-koden
Som nævnt er SOUNDEX()
funktion returnerer Soundex-koden for den givne streng. Soundex-koden er en kode på fire tegn, der er baseret på, hvordan strengen lyder, når den bliver talt. Her er et eksempel på en Soundex-kode:
S600
Sådan er en Soundex-kode opbygget:
- Det første tegn i koden er det første tegn i strengen, konverteret til store bogstaver. Så i ovenstående eksempel ved vi, at strengen starter med bogstavet S (enten med små eller store bogstaver).
- Det andet til det fjerde tegn i koden er tal, der repræsenterer bogstaverne i udtrykket.
- Bogstavene A, E, I, O, U, H, W og Y ignoreres, medmindre de er det første bogstav i strengen.
- Nuller tilføjes i slutningen, hvis det er nødvendigt for at producere en kode på fire tegn.
Eksempel
Her er et eksempel på at hente Soundex-strengen fra en streng:
SELECT SOUNDEX('Sure');
Resultat:
S600
Så vi kan se, at ordet Sure
har en Soundex-kode på S600
.
Eksempel på to matchende ord
Her er et eksempel på, hvor to ord deler den samme Soundex-kode (fordi de lyder ens):
SELECT SOUNDEX('Sure') AS Sure, SOUNDEX('Shore') AS Shore;
Resultat:
Sure Shore ---- ----- S600 S600
Her er nogle eksempler på mere eksakt match:
SELECT SOUNDEX('Dam') AS Dam, SOUNDEX('Damn') AS Damn, SOUNDEX('Too') AS Too, SOUNDEX('Two') AS Two;
Resultat:
Dam Damn Too Two ---- ---- ---- ---- D500 D500 T000 T000
Eksempel på ord, der ikke matcher
Her er et eksempel på, hvor to ord ikke lyder ens, og derfor har de forskellige Soundex-koder:
SELECT SOUNDEX('Water') AS Water, SOUNDEX('Coffee') AS Coffee;
Resultat:
Water Coffee ----- ------ W360 C100
Ord med forskellige stavemåder
Nogle ord har forskellige stavemåder afhængigt af hvilket land du kommer fra. Sådanne ord vil dele den samme Soundex-kode:
SELECT SOUNDEX('Flavor') AS 'Flavor', SOUNDEX('Flavour') AS 'Flavour';
Resultat:
Flavor Flavour ------ ------- F416 F416
Samme lyd, anden Soundex-kode
Nogle gange lyder to ord ens, men de har forskellige Soundex-koder. Den mest almindelige årsag til dette er, at de starter med et andet bogstav (man bruger et tavst bogstav). Som nævnt starter Soundex-koden med det første bogstav i strengen (konverteret til store bogstaver). Derfor, hvis du har to ord, der udtales nøjagtigt ens, men de starter med et andet bogstav, vil de have en anden Soundex-kode.
Her er nogle eksempler:
SELECT SOUNDEX('Hole') AS 'Hole', SOUNDEX('Whole') AS 'Whole', SOUNDEX('Our') AS Our, SOUNDEX('Hour') AS Hour;
Resultat:
Hole Whole Our Hour ---- ----- ---- ---- H400 W400 O600 H600
Parrene i dette eksempel har forskellige Soundex-koder, udelukkende fordi deres første bogstav er forskelligt.