V Oracle, SOUNDEX()
Funkce vrací řetězec znaků obsahující fonetickou reprezentaci jejího argumentu. Toto je známé jako řetězec Soundex.
Soundex je fonetický algoritmus pro indexování jmen podle zvuku, jak se vyslovuje v angličtině. Pokud dvě slova znějí stejně, měla by mít stejný řetězec Soundex. Pokud dvě slova znějí podobně, ale ne úplně stejně, jejich řetězec Soundex může vypadat podobně, ale ne úplně stejně.
Funkce přijímá jeden argument:řetězec, pro který má být vrácen řetězec Soundex.
Syntaxe
Syntaxe vypadá takto:
SOUNDEX(char)
Kde char
je řetězec, ze kterého se má vrátit řetězec Soundex. Může to být jakýkoli datový typ CHAR
, VARCHAR2
, NCHAR
nebo NVARCHAR2
. Vrácená hodnota je stejného datového typu jako argument.
Příklad
Zde je základní příklad:
SELECT SOUNDEX('Bat')
FROM DUAL;
Výsledek:
B300
Zde je další příklad, který porovnává řetězec Soundex vrácený z podobně, ale odlišně znějících slov:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap')
FROM DUAL;
Výsledek:
SOUNDEX('BAT') SOUNDEX('CAT') SOUNDEX('CAP') _________________ _________________ _________________ B300 C300 C100
A tady je jeden, který porovnává slova, která neznějí stejně:
SELECT
SOUNDEX('Ponzi'),
SOUNDEX('Bracket'),
SOUNDEX('Heavy')
FROM DUAL;
Výsledek:
SOUNDEX('PONZI') SOUNDEX('BRACKET') SOUNDEX('HEAVY') ___________________ ______________________ _______________0____________________________ H01 H01 P5Přesné shody
Zde je příklad párů slov, která mají shodný řetězec Soundex, i když jde o různá slova s různými významy:
SELECT SOUNDEX('Dam') AS Dam, SOUNDEX('Damn') AS Damn, SOUNDEX('Too') AS Too, SOUNDEX('Two') AS Two FROM DUAL;
Výsledek:
SAKRAT TAK DVA _______ _______ _______ _______ D500 D500 T000 T000Příklad databáze
Zde je příklad získání řetězce Soundex z databázového dotazu:
SELECT country_name, SOUNDEX(country_name) FROM countries FETCH FIRST 10 ROWS ONLY;
Výsledek:
COUNTRY_NAME SOUNDEX(COUNTRY_NAME) _______________ ________________________ Argentina A625 Austrálie A236 Belgie B425 Brazílie B624 Kanada C530 Švýcarsko S326 Čína C500 Německo C500 Německo G16 EgyptMůžeme také použít
SOUNDEX()
vWHERE
klauzule pro vrácení pouze těch řádků, které znějí jako dané slovo:SELECT employee_id, first_name, last_name FROM employees WHERE SOUNDEX(first_name) = SOUNDEX('Stephen');
Výsledek:
EMPLOYEE_ID FIRST_NAME LAST_NAME ______________ _____________ ____________ 100 Steven King 128 Steven Markle 138 Stephen StilesPrázdný řetězec
Co se stane, když je pro každý daný argument předán prázdný řetězec:
SET NULL 'null'; SELECT SOUNDEX('') FROM DUAL;
Výsledek:
nullVe výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když
null
dochází v důsledku SQLSELECT
prohlášení.Můžete však použít
SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězecnull
by měl být vrácen.Nulový argument
Předávání
null
vrátínull
:SELECT SOUNDEX(null) FROM DUAL;
Výsledek:
nullChybí argument
Volání
SOUNDEX()
bez předání jakýchkoli argumentů dojde k chybě:SELECT SOUNDEX() FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT SOUNDEX()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:A předání příliš mnoha argumentů také vede k chybě:
SELECT SOUNDEX('Gosh', 'Dang') FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT SOUNDEX('Bože', 'Dang')FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce: