В 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: