sql >> Database teknologi >  >> RDS >> Oracle

SOUNDEX() Funktion i Oracle

I Oracle er SOUNDEX() funktion returnerer en tegnstreng, der indeholder den fonetiske repræsentation af dens argument. Dette er kendt som Soundex-strengen.

Soundex er en fonetisk algoritme til at indeksere navne efter lyd, som udtales på engelsk. Hvis to ord lyder ens, skal de have den samme Soundex-streng. Hvis to ord lyder ens, men ikke helt ens, kan deres Soundex-streng ligne, men ikke helt ens.

Funktionen accepterer ét argument:strengen, som Soundex-strengen skal returneres fra.

Syntaks

Syntaksen ser sådan ud:

SOUNDEX(char)

Hvor char er den streng, som Soundex-strengen skal returneres fra. Det kan være af enhver af datatyperne CHAR , VARCHAR2 , NCHAR eller NVARCHAR2 . Returværdien er den samme datatype som argumentet.

Eksempel

Her er et grundlæggende eksempel:

SELECT SOUNDEX('Bat')
FROM DUAL;

Resultat:

B300

Her er et andet eksempel, der sammenligner Soundex-strengen, der er returneret fra lignende, men forskellige, lydende ord:

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

Resultat:

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

Og her er en, der sammenligner ord, der ikke lyder ens:

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

Resultat:

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

Nøjagtige match

Her er et eksempel på ordpar, der har en matchende Soundex-streng, selvom de er forskellige ord, med forskellige betydninger:

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   

Databaseeksempel

Her er et eksempel på at få Soundex-strengen fra en databaseforespørgsel:

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 også bruge SOUNDEX() i en WHERE klausul for kun at returnere de rækker, der lyder som et 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 streng

Her er, hvad der sker, når en tom streng sendes for hvert givet argument:

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

Resultat:

null

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Nul-argument

Sender null returnerer null :

SELECT SOUNDEX(null)
FROM DUAL;

Resultat:

null

Manglende argument

Kalder SOUNDEX() uden at sende nogen argumenter resulterer det i en fejl:

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:

Og at sende for mange argumenter resulterer også i en fejl:

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. hvordan laver man forbindelsespooling i java?

  2. SQL Server VÆLG SIDSTE N rækker

  3. fe_sendauth:ingen adgangskode angivet

  4. Højere kardinalitetskolonne først i et indeks, når det involverer et interval?