Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction SOUNDEX() dans Oracle

Dans Oracle, le SOUNDEX() La fonction renvoie une chaîne de caractères contenant la représentation phonétique de son argument. C'est ce qu'on appelle la chaîne Soundex.

Soundex est un algorithme phonétique permettant d'indexer les noms par son, tel qu'il se prononce en anglais. Si deux mots ont le même son, ils doivent avoir la même chaîne Soundex. Si deux mots semblent similaires, mais pas exactement identiques, leur chaîne Soundex peut sembler similaire mais pas exactement identique.

La fonction accepte un argument :la chaîne pour laquelle renvoyer la chaîne Soundex.

Syntaxe

La syntaxe ressemble à ceci :

SOUNDEX(char)

char est la chaîne pour laquelle renvoyer la chaîne Soundex. Il peut s'agir de n'importe quel type de données CHAR , VARCHAR2 , NCHAR , ou NVARCHAR2 . La valeur de retour est du même type de données que l'argument.

Exemple

Voici un exemple de base :

SELECT SOUNDEX('Bat')
FROM DUAL;

Résultat :

B300

Voici un autre exemple qui compare la chaîne Soundex renvoyée par des mots similaires, mais différents :

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

Résultat :

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

Et en voici une qui compare des mots qui ne se ressemblent pas :

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

Résultat :

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

Correspondances exactes

Voici un exemple de paires de mots qui ont une chaîne Soundex correspondante, même s'il s'agit de mots différents, avec des significations différentes :

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

Résultat :

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

Exemple de base de données

Voici un exemple d'obtention de la chaîne Soundex à partir d'une requête de base de données :

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

Résultat :

   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                     

On peut aussi utiliser SOUNDEX() dans un WHERE clause pour renvoyer uniquement les lignes qui ressemblent à un mot donné :

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

Résultat :

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

Chaîne vide

Voici ce qui se passe lorsqu'une chaîne vide est passée pour chaque argument donné :

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

Résultat :

null

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Argument nul

Passer null renvoie null :

SELECT SOUNDEX(null)
FROM DUAL;

Résultat :

null

Argument manquant

Appel de SOUNDEX() sans passer d'arguments entraîne une erreur :

SELECT SOUNDEX()
FROM DUAL;

Résultat :

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:

Et passer trop d'arguments entraîne également une erreur :

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

Résultat :

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: