Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SOUNDEX()-Funktion in Oracle

In Oracle das SOUNDEX() Die Funktion gibt eine Zeichenfolge zurück, die die phonetische Darstellung ihres Arguments enthält. Dies ist als Soundex-String bekannt.

Soundex ist ein phonetischer Algorithmus zum Indizieren von Namen nach Ton, wie sie im Englischen ausgesprochen werden. Wenn zwei Wörter gleich klingen, sollten sie den gleichen Soundex-String haben. Wenn zwei Wörter ähnlich, aber nicht genau gleich klingen, sieht ihre Soundex-Zeichenfolge möglicherweise ähnlich, aber nicht genau gleich aus.

Die Funktion akzeptiert ein Argument:die Zeichenfolge, von der die Soundex-Zeichenfolge zurückgegeben werden soll.

Syntax

Die Syntax sieht so aus:

SOUNDEX(char)

Wobei char ist die Zeichenfolge, für die die Soundex-Zeichenfolge zurückgegeben werden soll. Es kann einen der Datentypen CHAR haben , VARCHAR2 , NCHAR , oder NVARCHAR2 . Der Rückgabewert ist vom gleichen Datentyp wie das Argument.

Beispiel

Hier ist ein einfaches Beispiel:

SELECT SOUNDEX('Bat')
FROM DUAL;

Ergebnis:

B300

Hier ist ein weiteres Beispiel, das die Soundex-Zeichenfolge vergleicht, die von ähnlichen, aber unterschiedlich klingenden Wörtern zurückgegeben wird:

SELECT 
    SOUNDEX('Bat'),
    SOUNDEX('Cat'),
    SOUNDEX('Cap')
FROM DUAL;

Ergebnis:

   SOUNDEX('BAT')    SOUNDEX('CAT')    SOUNDEX('CAP') 
_________________ _________________ _________________ 
B300              C300              C100             

Und hier ist einer, der Wörter vergleicht, die nicht gleich klingen:

SELECT 
    SOUNDEX('Ponzi'),
    SOUNDEX('Bracket'),
    SOUNDEX('Heavy')
FROM DUAL;

Ergebnis:

   SOUNDEX('PONZI')    SOUNDEX('BRACKET')    SOUNDEX('HEAVY') 
___________________ _____________________ ___________________ 
P520                B623                  H100                

Genaue Übereinstimmungen

Hier ist ein Beispiel für Wortpaare, die eine übereinstimmende Soundex-Zeichenfolge haben, obwohl es sich um unterschiedliche Wörter mit unterschiedlichen Bedeutungen handelt:

SELECT 
    SOUNDEX('Dam') AS Dam, 
    SOUNDEX('Damn') AS Damn, 
    SOUNDEX('Too') AS Too, 
    SOUNDEX('Two') AS Two
FROM DUAL;

Ergebnis:

    DAM    DAMN     TOO     TWO 
_______ _______ _______ _______ 
D500    D500    T000    T000   

Datenbankbeispiel

Hier ist ein Beispiel für das Abrufen der Soundex-Zeichenfolge aus einer Datenbankabfrage:

SELECT 
    country_name, 
    SOUNDEX(country_name)
FROM countries
FETCH FIRST 10 ROWS ONLY;

Ergebnis:

   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                     

Wir können auch SOUNDEX() verwenden in einem WHERE -Klausel, um nur die Zeilen zurückzugeben, die wie ein bestimmtes Wort klingen:

SELECT
    employee_id,
    first_name,
    last_name
FROM employees
WHERE SOUNDEX(first_name) = SOUNDEX('Stephen');

Ergebnis:

   EMPLOYEE_ID    FIRST_NAME    LAST_NAME 
______________ _____________ ____________ 
           100 Steven        King         
           128 Steven        Markle       
           138 Stephen       Stiles      

Leerer String

Folgendes passiert, wenn für jedes angegebene Argument eine leere Zeichenfolge übergeben wird:

SET NULL 'null';
SELECT SOUNDEX('')
FROM DUAL;

Ergebnis:

null

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Null-Argument

Übergabe von null gibt null zurück :

SELECT SOUNDEX(null)
FROM DUAL;

Ergebnis:

null

Fehlendes Argument

Aufruf von SOUNDEX() ohne Übergabe von Argumenten ergibt sich ein Fehler:

SELECT SOUNDEX()
FROM DUAL;

Ergebnis:

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:

Und die Übergabe zu vieler Argumente führt ebenfalls zu einem Fehler:

SELECT SOUNDEX('Gosh', 'Dang')
FROM DUAL;

Ergebnis:

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: