Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função SOUNDEX() no Oracle


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: