Categorias:

Funções de cadeia de caracteres e binários

SOUNDEX

Retorna uma cadeia de caracteres que contém uma representação fonética da cadeia de caracteres de entrada.

Você pode usar essa função para determinar se duas cadeias de caracteres (por exemplo, os nomes de família Levine e Lavine, as palavras to e too, etc.) têm pronomes semelhantes no idioma inglês.

Essa função usa o algoritmo fonético Soundex, que é descrito em Soundex System. Observe, entretanto, que o Snowflake não oferece nenhum tratamento especial para prefixos de sobrenomes (por exemplo “Van”, “De”, “La”, etc.).

SOUNDEX('Pfister') retorna P236. Como as duas primeiras letras (P e f) são adjacentes e compartilham o mesmo número de código Soundex (1), a função ignora o número de código Soundex da segunda letra.

Alguns sistemas de banco de dados (por exemplo, Teradata) usam uma variante que mantém o número de código Soundex para a segunda letra quando a primeira e a segunda letras usam o mesmo número. Para essa variante, a cadeia de caracteres para Pfister é P123 (não P236). Para usar essa variante, chame a função SOUNDEX_P123.

Consulte também:

SOUNDEX_P123

Sintaxe

SOUNDEX( <varchar_expr> )
Copy

Argumentos

varchar_expr

A cadeia de caracteres para a qual uma representação da pronúncia é devolvida. A cadeia de caracteres deve usar o conjunto de caracteres latino ou Unicode.

Retornos

O valor retornado é um VARCHAR que contém a representação fonética da cadeia de caracteres de entrada. Em outras palavras, o valor de retorno é uma cadeia de caracteres (não um som) que representa a pronúncia (não a ortografia) da cadeia de caracteres de entrada.

Observe o seguinte:

  • O valor retornado começa com uma letra que representa a primeira letra da cadeia de caracteres seguida por 3 dígitos (por exemplo s400, c130).

    Para obter mais informações sobre como o valor de retorno é calculado, consulte o algoritmo fonético Soundex (na Wikipedia).

  • Como mencionado anteriormente, se você quiser usar a variante que mantém o número de código Soundex para a segunda letra quando a primeira e a segunda letras usam o mesmo número, chame a função SOUNDEX_P123.

Notas de uso

  • Como a função retorna apenas quatro caracteres (uma letra e três dígitos), a saída é determinada principalmente pelas primeiras sílabas da entrada, em vez de toda a cadeia de caracteres.

    Por exemplo, a seguinte instrução compara três cadeias de caracteres e retorna o mesmo valor SOUNDEX para cada cadeia de caracteres porque, embora tenham grafias e significados completamente diferentes, começam com sílabas foneticamente semelhantes:

    SELECT SOUNDEX('I love rock and roll music.'),
           SOUNDEX('I love rocks and gemstones.'),
           SOUNDEX('I leave a rock wherever I go.');
    +----------------------------------------+--------------------------+------------------------------------------+
    | SOUNDEX('I LOVE ROCK AND ROLL MUSIC.') | SOUNDEX('I LOVE ROCKS.') | SOUNDEX('I LEAVE A ROCK WHEREVER I GO.') |
    |----------------------------------------+--------------------------+------------------------------------------|
    | I416                                   | I416                     | I416                                     |
    +----------------------------------------+--------------------------+------------------------------------------+
    
    Copy

Exemplos

A seguinte consulta retorna valores SOUNDEX para dois nomes que são soletrados de forma diferente, mas são tipicamente pronunciados de forma semelhante:

SELECT SOUNDEX('Marks'), SOUNDEX('Marx');
+------------------+-----------------+
| SOUNDEX('MARKS') | SOUNDEX('MARX') |
|------------------+-----------------|
| M620             | M620            |
+------------------+-----------------+
Copy

A consulta a seguir demonstra como usar SOUNDEX para encontrar linhas potencialmente relacionadas em diferentes tabelas:

Criar e carregar as tabelas:

CREATE TABLE sounding_board (v VARCHAR);
CREATE TABLE sounding_bored (v VARCHAR);
INSERT INTO sounding_board (v) VALUES ('Marsha');
INSERT INTO sounding_bored (v) VALUES ('Marcia');
Copy

Procurar por registros relacionados sem SOUNDEX:

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE bored.v = board.v;
+---+---+
| V | V |
|---+---|
+---+---+
Copy

Procurar por registros relacionados usando SOUNDEX:

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE SOUNDEX(bored.v) = SOUNDEX(board.v);
+--------+--------+
| V      | V      |
|--------+--------|
| Marsha | Marcia |
+--------+--------+
Copy