sql >> Database >  >> RDS >> Sqlserver

Hoe de SQL Server SOUNDEX()-functie werkt

Soundex is een fonetisch algoritme voor het indexeren van namen op geluid, zoals uitgesproken in het Engels. Het werd ontwikkeld en gepatenteerd in 1918 en 1922.

Een van de beschikbare functies in SQL Server is de SOUNDEX() functie, die de Soundex-code voor een gegeven string retourneert.

Syntaxis

De syntaxis gaat als volgt:

SOUNDEX ( character_expression )

Waar character_expression is het woord of de tekenreeks waarvoor u de Soundex-code wilt hebben. Dit kan een constante, variabele of kolom zijn.

De SOUNDEX() functie is sorteergevoelig en tekenreeksfuncties kunnen worden genest.

De Soundex-code

Zoals gezegd, de SOUNDEX() functie retourneert de Soundex-code voor de gegeven string. De Soundex-code is een code van vier tekens die is gebaseerd op hoe de snaar klinkt wanneer deze wordt uitgesproken. Hier is een voorbeeld van een Soundex-code:

S600

Zo wordt een Soundex-code opgebouwd:

  • Het eerste teken van de code is het eerste teken van de tekenreeks, geconverteerd naar hoofdletters. Dus in het bovenstaande voorbeeld weten we dat de string begint met de letter S (kleine of hoofdletter).
  • Het tweede tot en met het vierde teken van de code zijn cijfers die de letters in de uitdrukking vertegenwoordigen.
  • De letters A, E, I, O, U, H, W en Y worden genegeerd, tenzij ze de eerste letter van de tekenreeks zijn.
  • Zo nodig worden aan het einde nullen toegevoegd om een ​​code van vier tekens te produceren.

Voorbeeld

Hier is een voorbeeld van het ophalen van de Soundex-string uit een string:

SELECT SOUNDEX('Sure');

Resultaat:

S600

We kunnen dus zien dat het woord Sure heeft een Soundex-code van S600 .

Voorbeeld van twee overeenkomende woorden

Hier is een voorbeeld van waar twee woorden dezelfde Soundex-code delen (omdat ze hetzelfde klinken):

SELECT 
    SOUNDEX('Sure') AS Sure, 
    SOUNDEX('Shore') AS Shore;

Resultaat:

Sure  Shore
----  -----
S600  S600

Hier zijn wat meer exacte matchvoorbeelden:

SELECT 
    SOUNDEX('Dam') AS Dam,
    SOUNDEX('Damn') AS Damn,
    SOUNDEX('Too') AS Too,
    SOUNDEX('Two') AS Two;

Resultaat:

Dam   Damn  Too   Two 
----  ----  ----  ----
D500  D500  T000  T000

Voorbeeld van woorden die niet overeenkomen

Hier is een voorbeeld van waar twee woorden niet hetzelfde klinken en daarom verschillende Soundex-codes hebben:

SELECT 
    SOUNDEX('Water') AS Water, 
    SOUNDEX('Coffee') AS Coffee;

Resultaat:

Water  Coffee
-----  ------
W360   C100

Woorden met verschillende spelling

Sommige woorden hebben verschillende spellingen, afhankelijk van het land waar je vandaan komt. Dergelijke woorden delen dezelfde Soundex-code:

SELECT 
  SOUNDEX('Flavor') AS 'Flavor',
  SOUNDEX('Flavour') AS 'Flavour';

Resultaat:

Flavor  Flavour
------  -------
F416    F416

Hetzelfde geluid, andere Soundex-code

Soms klinken twee woorden hetzelfde, maar hebben ze verschillende Soundex-codes. De meest voorkomende reden hiervoor is dat ze met een andere letter beginnen (men gebruikt een stille letter). Zoals gezegd begint de Soundex-code met de eerste letter van de tekenreeks (omgezet naar hoofdletters). Als je dus twee woorden hebt die precies hetzelfde worden uitgesproken, maar met een andere letter beginnen, hebben ze een andere Soundex-code.

Hier zijn enkele voorbeelden:

SELECT
    SOUNDEX('Hole') AS 'Hole',
    SOUNDEX('Whole') AS 'Whole',
    SOUNDEX('Our') AS Our,
    SOUNDEX('Hour') AS Hour;

Resultaat:

Hole  Whole  Our   Hour
----  -----  ----  ----
H400  W400   O600  H600

De paren in dit voorbeeld hebben verschillende Soundex-codes, alleen omdat hun eerste letter anders is.


  1. Hoe kunnen meerdere rijen worden samengevoegd tot één in Oracle zonder een opgeslagen procedure te maken?

  2. Voorwaardelijke WHERE-clausule met CASE-instructie in Oracle

  3. MySQL Storage Engine-optimalisatie:InnoDB-optimalisatie configureren voor hoge prestaties

  4. Hoe top 1 en gesorteerd op datum selecteren in Oracle SQL?