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: