본문으로 바로가기
본문으로 바로가기

문자열 치환 함수

일반 문자열 함수문자열 검색 함수는 별도로 설명합니다.

참고

아래 문서는 system.functions 시스템 테이블을 기반으로 생성되었습니다.

format

도입 버전: v20.1

Python의 포맷과 유사하게, 인자 목록에 있는 값(문자열, 정수 등)으로 pattern 문자열의 서식을 지정합니다. 패턴 문자열에는 중괄호 {}로 둘러싸인 치환 필드(replacement field)를 포함할 수 있습니다. 중괄호에 포함되지 않은 모든 내용은 리터럴 텍스트로 간주되며 출력에 그대로 복사됩니다. 리터럴 중괄호 문자는 두 개의 중괄호 {{, }}로 이스케이프할 수 있습니다. 필드 이름은 숫자(0부터 시작)이거나 비워 둘 수 있으며, 비워 둔 경우 순차적으로 증가하는 숫자가 암묵적으로 부여됩니다.

구문

format(pattern, s0[, s1, ...])

인수

  • pattern — 플레이스홀더를 포함하는 포맷 문자열입니다. String
  • s0[, s1, ...] — pattern 문자열의 플레이스홀더에 대입할 하나 이상의 값입니다. Any

반환 값

포맷된 문자열을 반환합니다. String

예제

번호가 매겨진 플레이스홀더

SELECT format('{1} {0} {1}', 'World', 'Hello')
┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello                       │
└─────────────────────────────────────────┘

암시적 번호 지정

SELECT format('{} {}', 'Hello', 'World')
┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World                       │
└───────────────────────────────────┘

overlay

도입된 버전: v24.9

1부터 시작하는 인덱스인 offset부터 문자열 input의 일부를 다른 문자열 replace로 대체합니다.

구문

overlay(s, replace, offset[, length])

인수

  • s — 입력 문자열입니다. String
  • replace — 치환 문자열입니다. const String
  • offset — 정수 타입 Int(1부터 시작)입니다. offset이 음수이면 문자열 s의 끝에서부터 계산합니다. Int
  • length — 선택 사항입니다. 정수 타입 Int입니다. length는 입력 문자열 s에서 치환할 부분 문자열의 길이를 지정합니다. length가 지정되지 않으면 s에서 제거되는 바이트 수는 replace의 길이와 같으며, 지정된 경우에는 length 바이트가 제거됩니다. Int

반환 값

치환이 적용된 문자열을 반환합니다. String

예시

기본 치환

SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;
┌─res──────────────────────┐
│ My mother is from Mexico.│
└──────────────────────────┘

길이 지정 치환

SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;
┌─res───────────────────┐
│ My dad is from Mexico.│
└───────────────────────┘

overlayUTF8

도입된 버전: v24.9

1부터 시작하는 인덱스 offset 위치에서 문자열 s의 일부를 다른 문자열 replace로 교체합니다. 문자열이 유효한 UTF-8로 인코딩된 텍스트를 포함한다고 가정합니다. 이 가정이 만족되지 않더라도 예외는 발생하지 않으며, 결과는 정의되지 않습니다.

구문

overlayUTF8(s, replace, offset[, length])

인수(Arguments)

  • s — 입력 문자열. String
  • replace — 대체 문자열. const String
  • offset — 정수 타입 Int (1부터 시작). offset이 음수이면 입력 문자열 s의 끝에서부터 센 위치를 의미합니다. (U)Int*
  • length — 선택적입니다. 입력 문자열 s에서 대체할 부분 문자열의 길이를 지정합니다. length가 지정되지 않으면 s에서 제거되는 문자 수는 replace의 길이와 같으며, 지정된 경우에는 length개의 문자가 제거됩니다. (U)Int*

반환값(Returned value)

대체가 적용된 문자열을 반환합니다. String

예시(Examples)

UTF-8 대체

SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;
┌─res───────────────────────────┐
│ Mein Vater ist aus der Türkei.│
└───────────────────────────────┘

printf

도입 버전: v24.8

printf 함수는 C++의 printf 함수와 유사하게, 인수로 나열된 값(문자열, 정수, 부동소수점 등)을 사용해 지정된 문자열을 서식화합니다. 서식 문자열에는 % 문자로 시작하는 서식 지정자를 포함할 수 있습니다. %와 그 뒤에 오는 서식 지정자에 포함되지 않은 모든 내용은 리터럴 텍스트로 간주되며, 출력에 그대로 복사됩니다. 리터럴 % 문자는 %%로 이스케이프할 수 있습니다.

구문

printf(format[, sub1, sub2, ...])

인수

  • format% 지정자가 포함된 형식 지정 문자열. String
  • sub1, sub2, ... — 선택 사항입니다. 형식 지정 문자열에 대체할 0개 이상의 값입니다. Any

반환 값

형식이 적용된 문자열을 반환합니다. String

예시

C++ 스타일 형식 지정

SELECT printf('%%%s %s %d', 'Hello', 'World', 2024);
┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
│ %Hello World 2024                            │
└──────────────────────────────────────────────┘

regexpQuoteMeta

도입된 버전: v20.1

정규식에서 특별한 의미를 가지는 다음 문자 앞에 역슬래시를 추가합니다: \0, \\, |, (, ), ^, $, ., [, ], ?, *, +, {, :, -. 이 구현은 re2::RE2::QuoteMeta와 약간 다릅니다. 널 바이트를 \x00이 아닌 \0로 이스케이프하며, 필요한 문자만 이스케이프합니다.

구문

regexpQuoteMeta(s)

인수

  • s — 정규식에서 이스케이프 처리해야 하는 문자를 포함하는 입력 문자열입니다. String

반환 값

정규식 특수 문자가 이스케이프 처리된 문자열을 반환합니다. String

예시

정규식 특수 문자 이스케이프하기

SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res
┌─res───────────────────────────┐
│ Hello\. \[World\]\? \(Yes\)\* │
└───────────────────────────────┘

replaceAll

도입 버전: v1.1

haystack 문자열에서 부분 문자열 pattern이 나타나는 모든 부분을 문자열 replacement로 교체합니다.

구문

replaceAll(haystack, pattern, replacement)

별칭(Aliases): replace

인자(Arguments)

  • haystack — 검색할 입력 문자열입니다. String
  • pattern — 찾아서 교체할 부분 문자열입니다. const String
  • replacementpattern을 대체할 문자열입니다. const String

반환 값(Returned value)

pattern이 나타나는 모든 부분이 교체된 문자열을 반환합니다. String

예시(Examples)

모든 패턴 교체(Replace all occurrences)

SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res;
┌─res──────────┐
│ Hi, Hi world │
└──────────────┘

replaceOne

도입 버전: v1.1

haystack에서 부분 문자열 pattern이 처음으로 나타나는 한 곳을 문자열 replacement로 대체합니다.

구문

replaceOne(haystack, pattern, replacement)

인수

  • haystack — 검색할 입력 문자열입니다. String
  • pattern — 찾아서 치환할 부분 문자열입니다. const String
  • replacementpattern을 대체할 문자열입니다. const String

반환 값

pattern이 처음으로 등장한 부분이 대체된 문자열을 반환합니다. String

예시

첫 번째 등장 부분 치환

SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res;
┌─res─────────────┐
│ Hi, Hello world │
└─────────────────┘

replaceRegexpAll

도입 버전: v1.1

replaceRegexpOne과 유사하지만, 패턴이 나타나는 모든 위치를 치환합니다. 예외적으로, 정규 표현식이 빈 하위 문자열에 일치하는 경우에는 치환이 한 번만 수행됩니다.

구문

replaceRegexpAll(haystack, pattern, replacement)

별칭: REGEXP_REPLACE

인수

  • haystack — 검색할 입력 문자열입니다. String
  • pattern — 찾을 정규 표현식 패턴입니다. const String
  • replacement — 패턴을 치환할 문자열로, 치환(substitution)을 포함할 수 있습니다. const String

반환 값

정규 표현식과 일치하는 모든 부분이 치환된 문자열을 반환합니다. String

예시

모든 문자를 두 번 반복한 문자로 치환

SELECT replaceRegexpAll('Hello123', '.', '\\\\0\\\\0') AS res
┌─res──────────────────┐
│ HHeelllloo112233     │
└──────────────────────┘

빈 부분 문자열 치환 예제

SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res
┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘

replaceRegexpOne

도입 버전: v1.1

정규식 pattern(re2 구문 사용)과 일치하는 부분 문자열 중 첫 번째로 등장하는 것을 haystack에서 찾아 replacement 문자열로 대체합니다. replacement에는 \0-\9 치환을 포함할 수 있습니다. 치환 \1-\9는 첫 번째부터 아홉 번째까지의 캡처 그룹(서브매치)에 해당하고, 치환 \0은 전체 매치에 해당합니다. pattern 또는 replacement 문자열에서 문자 그대로의 \ 문자를 사용하려면 \로 이스케이프해야 합니다. 또한 문자열 리터럴에는 추가 이스케이프가 필요함을 유의하십시오.

구문

replaceRegexpOne(haystack, pattern, replacement)

인수

  • haystack — 검색할 입력 문자열입니다. String
  • pattern — 검색할 정규 표현식 패턴입니다. const String
  • replacement — 패턴을 대체할 문자열로, 치환을 포함할 수 있습니다. const String

반환 값

첫 번째 정규 표현식 일치 항목을 치환한 문자열을 반환합니다. String

예시

ISO 날짜를 미국 형식으로 변환하기

SELECT DISTINCT
    EventDate,
    replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM test.hits
LIMIT 7
FORMAT TabSeparated
2014-03-17      03/17/2014
2014-03-18      03/18/2014
2014-03-19      03/19/2014
2014-03-20      03/20/2014
2014-03-21      03/21/2014
2014-03-22      03/22/2014
2014-03-23      03/23/2014

문자열을 10번 반복하기

SELECT replaceRegexpOne('Hello, World!', '.*', '\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0') AS res
┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

translate

도입: v22.7

문자열 s에서 fromto 문자열로 정의된 1:1 문자 매핑을 사용하여 문자를 치환합니다. fromto는 상수 ASCII 문자열이어야 합니다. fromto의 길이가 같다면, s 안에 있는 from의 첫 번째 문자가 나타날 때마다 to의 첫 번째 문자로, 두 번째 문자가 나타날 때마다 to의 두 번째 문자로 치환되는 방식으로 적용됩니다. fromto보다 더 많은 문자가 포함되어 있으면, to에 대응 문자가 없는 from 끝부분의 문자들은 s에서 모두 삭제됩니다. s에 있는 ASCII가 아닌 문자는 이 함수에 의해 변경되지 않습니다.

구문

translate(s, from, to)

인수

  • s — 변환할 입력 문자열입니다. String
  • from — 교체할 문자가 포함된 상수 ASCII 문자열입니다. const String
  • to — 교체할 문자로 사용할 문자가 포함된 상수 ASCII 문자열입니다. const String

반환 값

문자 치환이 적용된 문자열을 반환합니다. String

예시

문자 매핑

SELECT translate('Hello, World!', 'delor', 'DELOR') AS res
┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘

길이가 서로 다른 경우

SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res
┌─res───┐
│ CLICK │
└───────┘

translateUTF8

도입된 버전: v22.7

translate와 유사하지만, s, from, to가 UTF-8로 인코딩된 문자열이라고 가정합니다.

구문

translateUTF8(s, from, to)

인수

  • s — 변환할 UTF-8 입력 문자열입니다. String
  • from — 치환할 문자를 포함하는 상수 UTF-8 문자열입니다. const String
  • to — 치환 문자들을 포함하는 상수 UTF-8 문자열입니다. const String

반환 값

String 데이터 타입 값을 반환합니다. String

예시

UTF-8 문자 치환

SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;
┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘