sql >> Base de Datos >  >> RDS >> Oracle

Función SOUNDEX() en Oracle

En Oracle, el SOUNDEX() La función devuelve una cadena de caracteres que contiene la representación fonética de su argumento. Esto se conoce como la cadena Soundex.

Soundex es un algoritmo fonético para indexar nombres por sonido, como se pronuncia en inglés. Si dos palabras suenan igual, deben tener la misma cadena Soundex. Si dos palabras suenan similares, pero no exactamente iguales, su cadena Soundex puede parecer similar pero no exactamente igual.

La función acepta un argumento:la cadena desde la que devolver la cadena Soundex.

Sintaxis

La sintaxis es así:

SOUNDEX(char)

Donde char es la cadena desde la cual se devolverá la cadena Soundex. Puede ser de cualquiera de los tipos de datos CHAR , VARCHAR2 , NCHAR o NVARCHAR2 . El valor devuelto es del mismo tipo de datos que el argumento.

Ejemplo

He aquí un ejemplo básico:

SELECT SOUNDEX('Bat')
FROM DUAL;

Resultado:

B300

Aquí hay otro ejemplo que compara la cadena Soundex devuelta por palabras que suenan similares, pero diferentes:

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

Resultado:

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

Y aquí hay uno que compara palabras que no suenan igual:

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

Resultado:

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

Coincidencias exactas

Aquí hay un ejemplo de pares de palabras que tienen una cadena Soundex coincidente, aunque son palabras diferentes, con significados diferentes:

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

Resultado:

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

Ejemplo de base de datos

Este es un ejemplo de cómo obtener la cadena Soundex de una consulta de la base de datos:

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

Resultado:

   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                     

También podemos usar SOUNDEX() en un WHERE cláusula para devolver solo aquellas filas que suenan como una palabra determinada:

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

Resultado:

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

Cadena vacía

Esto es lo que sucede cuando se pasa una cadena vacía para cada argumento dado:

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

Resultado:

null

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Argumento nulo

Pasando null devuelve null :

SELECT SOUNDEX(null)
FROM DUAL;

Resultado:

null

Argumento faltante

Llamando a SOUNDEX() sin pasar ningún argumento da como resultado un error:

SELECT SOUNDEX()
FROM DUAL;

Resultado:

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:

Y pasar demasiados argumentos también da como resultado un error:

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

Resultado:

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: