W Oracle SOUNDEX()
funkcja zwraca ciąg znaków zawierający fonetyczną reprezentację jej argumentu. Jest to znane jako ciąg Soundex.
Soundex to algorytm fonetyczny służący do indeksowania nazw według dźwięku wymawianego w języku angielskim. Jeśli dwa słowa brzmią tak samo, powinny mieć ten sam ciąg Soundex. Jeśli dwa słowa brzmią podobnie, ale nie dokładnie tak samo, ich ciąg Soundex może wyglądać podobnie, ale nie dokładnie tak samo.
Funkcja przyjmuje jeden argument:ciąg, z którego ma zostać zwrócony ciąg Soundex.
Składnia
Składnia wygląda tak:
SOUNDEX(char)
Gdzie char
jest ciągiem, z którego ma zostać zwrócony ciąg Soundex. Może mieć dowolny typ danych CHAR
, VARCHAR2
, NCHAR
lub NVARCHAR2
. Zwracana wartość jest tego samego typu danych co argument.
Przykład
Oto podstawowy przykład:
SELECT SOUNDEX('Bat')
FROM DUAL;
Wynik:
B300
Oto kolejny przykład porównujący ciąg Soundex zwrócony z podobnych, ale inaczej brzmiących słów:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap')
FROM DUAL;
Wynik:
SOUNDEX('BAT') SOUNDEX('KAT') SOUNDEX('CAP') _________________ _________________ _________________ B300 C300 C100
A oto jeden, który porównuje słowa, które nie brzmią podobnie:
SELECT
SOUNDEX('Ponzi'),
SOUNDEX('Bracket'),
SOUNDEX('Heavy')
FROM DUAL;
Wynik:
Dopasowania ścisłe
Oto przykład par słów, które mają pasujący ciąg Soundex, mimo że są to różne słowa o różnych znaczeniach:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two
FROM DUAL;
Wynik:
KULA KURWA ZA DWA _______ _______ _______ _______ D500 D500 T000 T000
Przykład bazy danych
Oto przykład pobierania ciągu Soundex z zapytania do bazy danych:
SELECT
country_name,
SOUNDEX(country_name)
FROM countries
FETCH FIRST 10 ROWS ONLY;
Wynik:
NAZWA_KRAJU SOUNDEX(NAZWA_KRAJU) _______________ ________________________ Argentyna A625 Australia A236 Belgia B425 Brazylia B624 Kanada C530 Szwajcaria S326 Chiny C500 Niemcy G655 Dania D562 Egipt E213
Możemy również użyć SOUNDEX()
w WHERE
klauzula zwracająca tylko te wiersze, które brzmią jak dane słowo:
SELECT
employee_id,
first_name,
last_name
FROM employees
WHERE SOUNDEX(first_name) = SOUNDEX('Stephen');
Wynik:
ID PRACOWNIKA IMIĘ NAZWISKO ______________ ______________ ____________ 100 Steven King 128 Steven Markle 138 Stephen Stiles
Pusty ciąg
Oto, co się dzieje, gdy dla każdego podanego argumentu zostanie przekazany pusty ciąg:
SET NULL 'null';
SELECT SOUNDEX('')
FROM DUAL;
Wynik:
null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Argument zerowy
Przekazywanie null
zwraca null
:
SELECT SOUNDEX(null)
FROM DUAL;
Wynik:
null
Brakujący argument
Wywołanie SOUNDEX()
bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT SOUNDEX()
FROM DUAL;
Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT SOUNDEX()FROM DUALError w wierszu polecenia:1 Kolumna:8Raport o błędzie -SQL Błąd:ORA-00909:nieprawidłowa liczba argumentów00909. 00000 - "nieprawidłowa liczba argumentów"*Przyczyna:*Działanie:
Przekazywanie zbyt wielu argumentów również skutkuje błędem:
SELECT SOUNDEX('Gosh', 'Dang')
FROM DUAL;
Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT SOUNDEX('Gosh', 'Dang')FROM DUALError w wierszu polecenia:1 Kolumna:8Raport o błędzie -SQL Błąd:ORA-00909:nieprawidłowa liczba argumentów00909. 00000 - "nieprawidłowa liczba argumentów"*Przyczyna:*Działanie: