SOUNDEX

SOUNDEX

입력 문자열의 음성(phonetic) 표현을 포함하는 문자열을 반환해요. 이 함수를 사용해 두 문자열(예: 성 Levine과 Lavine, 단어 to와 too 등)이 영어에서 비슷한 발음을 가지는지 확인할 수 있어요. 이 함수는 Soundex System에서 설명하는 Soundex 음성 알고리즘을 사용해요. 단, Snowflake는 성 접두사(예: "Van", "De", "La" 등)에 대한 특별한 처리를 제공하지 않아요.

SOUNDEX('Pfister')는 P236을 반환해요. 처음 두 글자(P와 f)가 인접하고 동일한 Soundex 코드 번호(1)를 공유하므로, 함수는 두 번째 글자의 Soundex 코드 번호를 무시해요.

일부 데이터베이스 시스템(예: Teradata)은 첫 번째와 두 번째 글자가 같은 번호를 사용할 때 두 번째 글자의 Soundex 코드 번호를 유지하는 변형을 사용해요. 그 변형에서는 Pfister의 문자열이 P123(P236이 아닌)이에요. 그 변형을 사용하려면 대신 SOUNDEX_P123 함수를 호출해요.

출처: Snowflake SQL Reference - SOUNDEX

본문

구문

SOUNDEX( <varchar_expr> )

인자

발음의 표현이 반환되는 문자열이에요. 문자열은 라틴 문자 또는 유니코드 문자 집합을 사용해야 해요.

반환 값

반환 값은 입력 문자열의 음성 표현을 포함하는 VARCHAR예요. 즉, 반환 값은 입력 문자열의 발음(철자가 아닌)을 나타내는 문자열(소리가 아닌)이에요. 다음에 유의해요.

  • 반환 값은 문자열의 첫 번째 글자를 나타내는 문자로 시작하고 그 뒤에 숫자 3개가 이어져요(예: s400, c130). 반환 값이 계산되는 방법에 대한 자세한 내용은 Soundex 음성 알고리즘(위키백과)을 참고해요.
  • 앞서 언급했듯이, 첫 번째와 두 번째 글자가 같은 번호를 사용할 때 두 번째 글자의 Soundex 코드 번호를 유지하는 변형을 사용하려면 대신 SOUNDEX_P123 함수를 호출해요.

사용상 주의사항

  • 함수가 네 글자(한 글자와 숫자 세 개)만 반환하므로 출력은 주로 입력의 처음 몇 음절에 의해 결정되며, 전체 문자열에 의해서가 아니에요.

예를 들어 다음 문은 세 문자열을 비교하고 각 문자열에 대해 동일한 SOUNDEX 값을 반환해요. 철자와 의미는 완전히 다르지만 음성적으로 비슷한 음절로 시작하기 때문이에요.

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                                     |
+----------------------------------------+--------------------------+------------------------------------------+

예시

다음 쿼리는 철자가 다르지만 일반적으로 비슷하게 발음되는 두 이름에 대한 SOUNDEX 값을 반환해요.

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

다음 쿼리는 서로 다른 테이블에서 잠재적으로 관련된 행을 찾기 위해 SOUNDEX를 사용하는 방법을 보여줘요.

테이블을 만들고 적재해요.

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');

SOUNDEX 없이 관련 레코드를 찾아요.

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

SOUNDEX를 사용해 관련 레코드를 찾아요.

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

더 알아보기