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

SOUNDEX() Funzione in Oracle

In Oracle, il SOUNDEX() La funzione restituisce una stringa di caratteri contenente la rappresentazione fonetica del suo argomento. Questa è conosciuta come la stringa Soundex.

Soundex è un algoritmo fonetico per l'indicizzazione dei nomi in base al suono, pronunciato in inglese. Se due parole suonano allo stesso modo, dovrebbero avere la stessa stringa Soundex. Se due parole suonano simili, ma non esattamente uguali, la loro stringa Soundex potrebbe sembrare simile ma non esattamente la stessa.

La funzione accetta un argomento:la stringa da cui restituire la stringa Soundex.

Sintassi

La sintassi è questa:

SOUNDEX(char)

Dove char è la stringa da cui restituire la stringa Soundex. Può essere di qualsiasi tipo di dati CHAR , VARCHAR2 , NCHAR o NVARCHAR2 . Il valore restituito è lo stesso tipo di dati dell'argomento.

Esempio

Ecco un esempio di base:

SELECT SOUNDEX('Bat')
FROM DUAL;

Risultato:

B300

Ecco un altro esempio che confronta la stringa Soundex restituita da parole simili, ma diverse, dal suono:

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

Risultato:

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

Ed eccone uno che confronta parole che non suonano allo stesso modo:

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

Risultato:

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

Corrispondenze esatte

Ecco un esempio di coppie di parole che hanno una stringa Soundex corrispondente, anche se sono parole diverse, con significati diversi:

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

Risultato:

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

Esempio di database

Ecco un esempio di come ottenere la stringa Soundex da una query del database:

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

Risultato:

   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                     

Possiamo anche usare SOUNDEX() in un WHERE clausola per restituire solo quelle righe che suonano come una determinata parola:

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

Risultato:

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

Stringa vuota

Ecco cosa succede quando viene passata una stringa vuota per ogni dato argomento:

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

Risultato:

null

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Argomento nullo

Passaggio null restituisce null :

SELECT SOUNDEX(null)
FROM DUAL;

Risultato:

null

Argomento mancante

Chiamando SOUNDEX() senza passare alcun argomento genera un errore:

SELECT SOUNDEX()
FROM DUAL;

Risultato:

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:

E anche passare troppi argomenti provoca un errore:

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

Risultato:

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: