sql >> Databasteknik >  >> RDS >> Oracle

SOUNDEX() Funktion i Oracle

I Oracle, SOUNDEX() funktion returnerar en teckensträng som innehåller den fonetiska representationen av dess argument. Detta är känt som Soundex-strängen.

Soundex är en fonetisk algoritm för att indexera namn efter ljud, som uttalas på engelska. Om två ord låter likadana bör de ha samma Soundex-sträng. Om två ord låter lika, men inte exakt likadana, kan deras Soundex-sträng se likadana ut men inte exakt likadana.

Funktionen accepterar ett argument:strängen som Soundex-strängen ska returneras från.

Syntax

Syntaxen ser ut så här:

SOUNDEX(char)

Där char är strängen som Soundex-strängen ska returneras från. Det kan vara av vilken som helst av datatyperna CHAR , VARCHAR2 , NCHAR , eller NVARCHAR2 . Returvärdet är samma datatyp som argumentet.

Exempel

Här är ett grundläggande exempel:

SELECT SOUNDEX('Bat')
FROM DUAL;

Resultat:

B300

Här är ett annat exempel som jämför Soundex-strängen som returneras från liknande, men olika, klingande ord:

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

Resultat:

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

Och här är en som jämför ord som inte låter likadana:

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

Resultat:

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

Exakta matchningar

Här är ett exempel på ordpar som har en matchande Soundex-sträng, även om de är olika ord, med olika betydelser:

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

Resultat:

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

Databasexempel

Här är ett exempel på hur du hämtar Soundex-strängen från en databasfråga:

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

Resultat:

   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                     

Vi kan också använda SOUNDEX() i en WHERE sats för att endast returnera de rader som låter som ett givet ord:

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

Resultat:

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

Töm sträng

Så här händer när en tom sträng skickas för varje givet argument:

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

Resultat:

null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Nollargument

Skickar null returnerar null :

SELECT SOUNDEX(null)
FROM DUAL;

Resultat:

null

Argument saknas

Anropar SOUNDEX() utan att skicka några argument resulterar i ett fel:

SELECT SOUNDEX()
FROM DUAL;

Resultat:

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:

Och att skicka för många argument resulterar också i ett fel:

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

Resultat:

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. Hur serialiserar jag en stor graf av .NET-objekt till en SQL Server BLOB utan att skapa en stor buffert?

  2. Använd COL_LENGTH() för att få en kolumns längd i SQL Server

  3. Oracle Database 21c för Linux-plattformar

  4. DatabaseError:aktuell transaktion avbröts, kommandon ignoreras till slutet av transaktionsblocket?