No Oracle, o
SOUNDEX()
A função retorna uma cadeia de caracteres contendo a representação fonética de seu argumento. Isso é conhecido como a string Soundex. Soundex é um algoritmo fonético para indexar nomes por som, conforme pronunciado em inglês. Se duas palavras soam iguais, elas devem ter a mesma string Soundex. Se duas palavras soam semelhantes, mas não exatamente iguais, sua string Soundex pode parecer semelhante, mas não exatamente a mesma.
A função aceita um argumento:a string da qual retornar a string Soundex.
Sintaxe
A sintaxe fica assim:
SOUNDEX(char)
Onde
char
é a string da qual retornar a string Soundex. Pode ser de qualquer um dos tipos de dados CHAR
, VARCHAR2
, NCHAR
, ou NVARCHAR2
. O valor de retorno é o mesmo tipo de dados que o argumento. Exemplo
Segue um exemplo básico:
SELECT SOUNDEX('Bat')
FROM DUAL;
Resultado:
B300
Aqui está outro exemplo que compara a string Soundex retornada de palavras com sons semelhantes, mas diferentes:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap')
FROM DUAL;
Resultado:
SOUNDEX('BAT') SOUNDEX('CAT') SOUNDEX('CAP') _________________ _________________ _________________ B300 C300 C100
E aqui está um que compara palavras que não soam iguais:
SELECT
SOUNDEX('Ponzi'),
SOUNDEX('Bracket'),
SOUNDEX('Heavy')
FROM DUAL;
Resultado:
SOUNDEX('PONZI') SOUNDEX('BRACKET') SOUNDEX('HEAVY') ___________________ _____________________ ___________________ P520 B623 H100
Correspondências exatas
Aqui está um exemplo de pares de palavras que têm uma string Soundex correspondente, mesmo que sejam palavras diferentes, com 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
Exemplo de banco de dados
Aqui está um exemplo de como obter a string Soundex de uma consulta de banco de dados:
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
Também podemos usar
SOUNDEX()
em um WHERE
cláusula para retornar apenas as linhas que soam como uma determinada palavra: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
String vazia
Aqui está o que acontece quando uma string vazia é passada para cada argumento dado:
SET NULL 'null';
SELECT SOUNDEX('')
FROM DUAL;
Resultado:
null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Argumento nulo
Passando
null
retorna null
:SELECT SOUNDEX(null)
FROM DUAL;
Resultado:
null
Argumento ausente
Chamando
SOUNDEX()
sem passar nenhum argumento resulta em um erro: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:
E passar muitos argumentos também resulta em um erro:
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: