sql >> Database >  >> RDS >> Oracle

SOUNDEX() Functie in Oracle

In Oracle, de SOUNDEX() functie retourneert een tekenreeks die de fonetische representatie van zijn argument bevat. Dit staat bekend als de Soundex-snaar.

Soundex is een fonetisch algoritme voor het indexeren van namen op geluid, zoals uitgesproken in het Engels. Als twee woorden hetzelfde klinken, moeten ze dezelfde Soundex-snaar hebben. Als twee woorden hetzelfde klinken, maar niet precies hetzelfde, kan hun Soundex-snaar er hetzelfde uitzien, maar niet precies hetzelfde.

De functie accepteert één argument:de tekenreeks waarvan de Soundex-reeks moet worden geretourneerd.

Syntaxis

De syntaxis gaat als volgt:

SOUNDEX(char)

Waar char is de tekenreeks waarvan de Soundex-reeks moet worden geretourneerd. Het kan van elk van de gegevenstypen CHAR . zijn , VARCHAR2 , NCHAR , of NVARCHAR2 . De geretourneerde waarde is hetzelfde gegevenstype als het argument.

Voorbeeld

Hier is een eenvoudig voorbeeld:

SELECT SOUNDEX('Bat')
FROM DUAL;

Resultaat:

B300

Hier is nog een voorbeeld dat de Soundex-reeks vergelijkt die wordt geretourneerd door vergelijkbare, maar verschillende, klinkende woorden:

SELECT 
    SOUNDEX('Bat'),
    SOUNDEX('Cat'),
    SOUNDEX('Cap')
FROM DUAL;

Resultaat:

   SOUNDEX('BAT')    SOUNDEX('CAT')    SOUNDEX('CAP') 
_________________ _________________ _________________ 
B300              C300              C100             

En hier is er een die woorden vergelijkt die niet hetzelfde klinken:

SELECT 
    SOUNDEX('Ponzi'),
    SOUNDEX('Bracket'),
    SOUNDEX('Heavy')
FROM DUAL;

Resultaat:

   SOUNDEX('PONZI')    SOUNDEX('BRACKET')    SOUNDEX('HEAVY') 
___________________ _____________________ ___________________ 
P520                B623                  H100                

Exacte overeenkomsten

Hier is een voorbeeld van woordparen die een overeenkomende Soundex-string hebben, ook al zijn het verschillende woorden, met verschillende betekenissen:

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

Resultaat:

    DAM    DAMN     TOO     TWO 
_______ _______ _______ _______ 
D500    D500    T000    T000   

Databasevoorbeeld

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

SELECT 
    country_name, 
    SOUNDEX(country_name)
FROM countries
FETCH FIRST 10 ROWS ONLY;

Resultaat:

   COUNTRY_NAME    SOUNDEX(COUNTRY_NAME) 
_______________ ________________________ 
Argentina       A625                     
Australia       A236                     
Belgium         B425                     
Brazil          B624                     
Canada          C530                     
Switzerland     S326                     
China           C500                     
Germany         G655                     
Denmark         D562                     
Egypt           E213                     

We kunnen ook SOUNDEX() . gebruiken in een WHERE clausule om alleen die rijen terug te geven die als een bepaald woord klinken:

SELECT
    employee_id,
    first_name,
    last_name
FROM employees
WHERE SOUNDEX(first_name) = SOUNDEX('Stephen');

Resultaat:

   EMPLOYEE_ID    FIRST_NAME    LAST_NAME 
______________ _____________ ____________ 
           100 Steven        King         
           128 Steven        Markle       
           138 Stephen       Stiles      

Lege string

Dit is wat er gebeurt als een lege string wordt doorgegeven voor elk gegeven argument:

SET NULL 'null';
SELECT SOUNDEX('')
FROM DUAL;

Resultaat:

null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Nullargument

Doorgeven van null retourneert null :

SELECT SOUNDEX(null)
FROM DUAL;

Resultaat:

null

Ontbrekend argument

SOUNDEX() . aanroepen zonder het doorgeven van argumenten resulteert in een fout:

SELECT SOUNDEX()
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT SOUNDEX()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

En het doorgeven van te veel argumenten resulteert ook in een fout:

SELECT SOUNDEX('Gosh', 'Dang')
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT SOUNDEX('Gosh', 'Dang')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Wat is het equivalent van Oracle's REF CURSOR in MySQL bij gebruik van JDBC?

  2. Haal het juiste deel van een string in SQL Server (T-SQL)

  3. Configureer SQL-taken in SQL Server met T-SQL

  4. MySQL-server opstartfout 'De server is gestopt zonder het PID-bestand bij te werken'