Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja SOUNDEX() w Oracle

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:

SOUNDEX('PONZI') SOUNDEX('NAWIAS') SOUNDEX('CIĘŻKI') ___________________ _____________________ __________________ P520 B623 H100

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dołącz do forum pytań i odpowiedzi dla programistów

  2. Oracle DateTime w klauzuli Where?

  3. oracle PL/SQL jak obliczyć zakres adresów IP dla cidr IPv6

  4. Czy SQLDeveloper obsługuje wykonywanie skryptów?

  5. Komunikat o błędzie programu sqldeveloper:Karta sieciowa nie może nawiązać błędu połączenia