본문으로 건너뛰기
최종 수정: 에

TRANSLATE

설명​

TRANSLATE 함수는 매핑 규칙에 따라 원본 문자열의 문자를 하나씩 치환합니다. 원본 문자열에서 'from' 문자열에 포함된 각 문자를 'to' 문자열의 같은 위치에 있는 문자로 치환합니다.

구문​

TRANSLATE(<source>, <from>, <to>)

매개변수​

매개변수설명
<source>변환할 원본 문자열입니다. 타입: VARCHAR
<from>치환할 문자 집합입니다. 타입: VARCHAR
<to>치환에 사용할 문자 집합입니다. 타입: VARCHAR

반환값​

문자 매핑 규칙에 따라 변환된 문자열을 VARCHAR 타입으로 반환합니다.

문자 매핑 규칙:

  • 'from' 문자열과 'to' 문자열의 위치를 기준으로 문자를 일대일로 매핑합니다
  • 'from'의 1번째 문자는 'to'의 1번째 문자에, 2번째 문자는 2번째 문자에 매핑되며, 이후에도 같은 방식으로 매핑됩니다
  • 'from'에 중복 문자가 있으면 처음 등장한 위치의 매핑을 사용하고 이후의 중복 문자는 무시합니다
  • 원본 문자열에서 'from' 문자열에 포함되지 않은 문자는 그대로 유지됩니다

특수한 경우:

  • 매개변수 중 하나라도 NULL이면 NULL을 반환합니다
  • 원본이 빈 문자열이면 빈 문자열을 반환합니다
  • 'from'이 빈 문자열이면 원본 문자열을 그대로 반환합니다
  • 'to'가 빈 문자열이면 원본에서 'from'에 포함된 모든 문자를 삭제합니다
  • 'to' 문자열이 'from'보다 짧으면 원본에서 'from'의 남는 문자에 해당하는 문자를 삭제합니다

예제​

  1. 기본 문자 치환
SELECT TRANSLATE('abcd', 'a', 'z');
+-----------------------------+
| TRANSLATE('abcd', 'a', 'z') |
+-----------------------------+
| zbcd |
+-----------------------------+
  1. 원본 문자가 등장하는 모든 위치에서 치환
SELECT TRANSLATE('abcda', 'a', 'z');
+------------------------------+
| TRANSLATE('abcda', 'a', 'z') |
+------------------------------+
| zbcdz |
+------------------------------+
  1. 여러 문자 매핑(위치 기준)
SELECT TRANSLATE('abcd', 'ac', 'zx');
+-------------------------------+
| TRANSLATE('abcd', 'ac', 'zx') |
+-------------------------------+
| zbxd |
+-------------------------------+
  1. <from>에 중복 문자가 있는 경우(첫 번째 매핑만 사용)
SELECT TRANSLATE('abacad', 'aac', 'zxy');
+-----------------------------------+
| TRANSLATE('abacad', 'aac', 'zxy') |
+-----------------------------------+
| zbzyzd |
+-----------------------------------+
  1. <to>가 <from>보다 짧은 경우(남는 문자 삭제)
SELECT TRANSLATE('abcde', 'ace', 'xy');
+---------------------------------+
| TRANSLATE('abcde', 'ace', 'xy') |
+---------------------------------+
| xbyd |
+---------------------------------+
  1. NULL 처리: 인수 중 하나라도 NULL이면 NULL 반환
SELECT TRANSLATE(NULL, 'a', 'z'), TRANSLATE('abc', NULL, 'z'), TRANSLATE('abc', 'a', NULL);
+---------------------------+-----------------------------+-----------------------------+
| TRANSLATE(NULL, 'a', 'z') | TRANSLATE('abc', NULL, 'z') | TRANSLATE('abc', 'a', NULL) |
+---------------------------+-----------------------------+-----------------------------+
| NULL | NULL | NULL |
+---------------------------+-----------------------------+-----------------------------+
  1. 빈 문자열의 경계 사례: 원본이 비어 있으면 빈 문자열 반환, <from>이 비어 있으면 원본을 그대로 반환, <to>가 비어 있으면 일치하는 문자 삭제
SELECT TRANSLATE('', 'a', 'z'), TRANSLATE('abc', '', 'z'), TRANSLATE('abc', 'a', '');
+-------------------------+---------------------------+---------------------------+
| TRANSLATE('', 'a', 'z') | TRANSLATE('abc', '', 'z') | TRANSLATE('abc', 'a', '') |
+-------------------------+---------------------------+---------------------------+
| | abc | bc |
+-------------------------+---------------------------+---------------------------+
  1. UTF-8 멀티바이트 문자
SELECT TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab');
+--------------------------------------------------+
| TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab') |
+--------------------------------------------------+
| abì ḍḍumai |
+--------------------------------------------------+
  1. 숫자 문자 치환
SELECT TRANSLATE('a1b2c3', '123', 'xyz');
+-----------------------------------+
| TRANSLATE('a1b2c3', '123', 'xyz') |
+-----------------------------------+
| axbycz |
+-----------------------------------+
  1. 양쪽 문자열에 중복 문자가 있는 경우의 반복 매핑
SELECT TRANSLATE('aabbccaa', 'abab', 'xyuv');
+---------------------------------------+
| TRANSLATE('aabbccaa', 'abab', 'xyuv') |
+---------------------------------------+
| xxyyccxx |
+---------------------------------------+
  1. 특수 기호 치환
SELECT TRANSLATE('hello@world.com', '@.', '-_');
+------------------------------------------+
| TRANSLATE('hello@world.com', '@.', '-_') |
+------------------------------------------+
| hello-world_com |
+------------------------------------------+

키워드​

TRANSLATE