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: