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)
Où 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: