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

문자열 치환 함수

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

참고

아래 문서는 system.functions 시스템 테이블에서 자동 생성되었습니다.

format

도입된 버전: v20.1.0

Python에서의 포맷팅과 유사하게, 인자에 나열된 값(문자열, 정수 등)을 사용하여 pattern 문자열을 포맷팅합니다. 패턴 문자열에는 중괄호 {}로 둘러싸인 치환 필드를 포함할 수 있습니다. 중괄호에 포함되지 않은 모든 내용은 리터럴 텍스트로 간주되며 출력에 그대로 복사됩니다. 리터럴 중괄호 문자는 두 개의 중괄호 {{}}로 이스케이프합니다. 필드 이름은 숫자(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.0

문자열 input의 일부를, 1부터 시작하는 인덱스인 offset 위치부터 문자열 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.0

문자열 s의 일부를 1부터 시작하는 인덱스인 offset 위치부터 문자열 replace로 교체합니다. 문자열에 올바르게 인코딩된 UTF-8 텍스트가 포함되어 있다고 가정합니다. 이 가정이 위배되더라도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

구문

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

인자

  • s — 입력 문자열. String
  • replace — 대체 문자열. const String
  • offset — 정수형 Int(1부터 시작). offset이 음수이면 입력 문자열 s의 끝에서부터 계산합니다. (U)Int*
  • length — 선택 사항입니다. 입력 문자열 s에서 대체할 부분 문자열의 길이를 지정합니다. length가 지정되지 않으면, s에서 제거되는 문자 수는 replace의 길이와 같으며, 지정되면 length 길이만큼 문자가 제거됩니다. (U)Int*

반환 값

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

예시

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.0

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

문법

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

인수

  • format% 지정자가 포함된 형식(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

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

Syntax

regexpQuoteMeta(s)

인자

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

반환값

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

예시

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

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

replaceAll

도입된 버전: v1.1.0

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

구문

replaceAll(haystack, pattern, replacement)

별칭: replace

인수

  • haystack — 검색할 입력 문자열입니다. String
  • pattern — 찾아 대체할 부분 문자열(패턴)입니다. const String
  • replacement — 패턴을 대체할 문자열입니다. const String

반환 값

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

예시

모든 일치 항목 대체

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

replaceOne

도입 버전: v1.1.0

haystack에서 처음으로 나타나는 부분 문자열 patternreplacement 문자열로 교체합니다.

구문

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.0

replaceRegexpOne와 같지만, 패턴이 일치하는 모든 부분 문자열을 대체합니다. 예외적으로, 정규식이 빈 부분 문자열에도 매칭되는 경우에는 대체가 한 번만 수행됩니다.

구문

replaceRegexpAll(haystack, pattern, replacement)

별칭: REGEXP_REPLACE

인자

  • haystack — 검색할 입력 문자열입니다. String
  • pattern — 찾을 정규 표현식 패턴입니다. const String
  • replacement — 패턴을 대체할 문자열로, 치환을 위한 표현을 포함할 수 있습니다. 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.0

정규식 pattern(re2 문법)을 사용해 haystack에서 처음으로 일치하는 부분 문자열을 찾아 replacement 문자열로 치환합니다. replacement에는 \0-\9 치환을 포함할 수 있습니다. 치환 \1-\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.0

문자열 s에서 fromto 문자열로 정의된 일대일 문자 매핑을 사용하여 문자를 치환합니다. fromto는 상수 ASCII 문자열이어야 합니다. fromto의 길이가 같으면, s에서 from의 첫 번째 문자가 나타날 때마다 to의 첫 번째 문자로 치환되고, s에서 from의 두 번째 문자가 나타날 때마다 to의 두 번째 문자로 치환되는 식으로 동작합니다. from에 포함된 문자의 수가 to보다 많으면, from의 끝부분에 있는 문자들 중 to에 해당 문자가 없는 것의 모든 발생이 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.0

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 │
└──────────────────┘