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: