Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

문자열 치환을 위한 함수

일반 문자열 함수문자열 검색 함수는 별도로 설명되어 있습니다.

format

도입 버전: v20.1.0

Python의 포매팅과 비슷하게, 인수에 나열된 값(문자열, 정수 등)을 사용해 pattern 문자열을 포맷합니다. 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 함수는 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

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

구문

regexpQuoteMeta(s)

인수

  • s — regex용으로 이스케이프할 문자가 포함된 입력 문자열입니다. String

반환 값

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

예시

regex 특수 문자 이스케이프

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
  • replacementpattern 대신 사용할 문자열입니다. const String

반환 값

pattern의 모든 일치 항목이 대체된 문자열을 반환합니다. String

예시

모든 일치 항목 대체

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

replaceOne

도입 버전: v1.1.0

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

haystack에서 정규식 pattern(re2 구문)과 일치하는 부분 문자열이 처음 나타나는 부분을 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 replaceRegexpOne(d, '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM values('d String', '2014-03-17', '2014-03-18', '2014-03-19')
┌─res────────┐
│ 03/17/2014 │
│ 03/18/2014 │
│ 03/19/2014 │
└────────────┘

문자열을 열 번 반복하기

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

fromto 문자열로 정의된 일대일 문자 매핑을 사용해 문자열 s의 문자를 대체합니다. fromto는 상수 ASCII 문자열이어야 합니다. fromto의 길이가 같으면 s에서 from의 첫 번째 문자가 나타날 때마다 to의 첫 번째 문자로 대체되고, from의 두 번째 문자는 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.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 │
└──────────────────┘
Navigation