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: