В Oracle, SOUNDEX()
функцията връща символен низ, съдържащ фонетичното представяне на неговия аргумент. Това е известно като низ на Soundex.
Soundex е фонетичен алгоритъм за индексиране на имена по звук, както се произнася на английски. Ако две думи звучат еднакво, те трябва да имат същия низ на Soundex. Ако две думи звучат сходно, но не съвсем еднакво, техният низ на Soundex може да изглежда подобно, но не съвсем същото.
Функцията приема един аргумент:низът, от който да върне низа на Soundex.
Синтаксис
Синтаксисът е така:
SOUNDEX(char)
Където char
е низът, от който да се върне низът на Soundex. Може да бъде от всеки тип данни CHAR
, VARCHAR2
, NCHAR
или NVARCHAR2
. Връщаната стойност е от същия тип данни като аргумента.
Пример
Ето един основен пример:
SELECT SOUNDEX('Bat')
FROM DUAL;
Резултат:
B300
Ето още един пример, който сравнява низа на Soundex, върнат от подобни, но различни, звучащи думи:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap')
FROM DUAL;
Резултат:
SOUNDEX('BAT') SOUNDEX('CAT') SOUNDEX('CAP') _________________ _________________ _________________ B300 C300 C100
И ето една, която сравнява думи, които не звучат еднакво:
SELECT
SOUNDEX('Ponzi'),
SOUNDEX('Bracket'),
SOUNDEX('Heavy')
FROM DUAL;
Резултат:
SOUNDEX('PONZI') SOUNDEX('BRACKET') SOUNDEX('HEAVY') ___________________ _____________________ ___________________ P520 B623 H100
Точни съвпадения
Ето пример за двойки думи, които имат съвпадащ низ на Soundex, въпреки че са различни думи, с различни значения:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two
FROM DUAL;
Резултат:
DAM DAMN TOO TWO _______ _______ _______ _______ D500 D500 T000 T000
Пример за база данни
Ето пример за получаване на низа на Soundex от заявка за база данни:
SELECT
country_name,
SOUNDEX(country_name)
FROM countries
FETCH FIRST 10 ROWS ONLY;
Резултат:
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
Можем също да използваме SOUNDEX()
в WHERE
клауза за връщане само на онези редове, които звучат като дадена дума:
SELECT
employee_id,
first_name,
last_name
FROM employees
WHERE SOUNDEX(first_name) = SOUNDEX('Stephen');
Резултат:
EMPLOYEE_ID FIRST_NAME LAST_NAME ______________ _____________ ____________ 100 Steven King 128 Steven Markle 138 Stephen Stiles
Празен низ
Ето какво се случва, когато се подаде празен низ за всеки даден аргумент:
SET NULL 'null';
SELECT SOUNDEX('')
FROM DUAL;
Резултат:
null
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Нулев аргумент
Предаването на null
връща null
:
SELECT SOUNDEX(null)
FROM DUAL;
Резултат:
null
Липсващ аргумент
Извикване на SOUNDEX()
без подаване на аргументи води до грешка:
SELECT SOUNDEX()
FROM DUAL;
Резултат:
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:
И предаването на твърде много аргументи също води до грешка:
SELECT SOUNDEX('Gosh', 'Dang')
FROM DUAL;
Резултат:
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: