> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-3a82795f.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 문자열 함수 문서

# 문자열을 다루는 함수

export const VersionBadge = ({minVersion}) => <div className="versionBadge">
    <div className="versionIcon" style={{
  marginRight: "8px",
  marginTop: "4px"
}}>
      <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
        <path d="M5 14C5.82843 14 6.5 13.3284 6.5 12.5C6.5 11.6716 5.82843 11 5 11C4.17157 11 3.5 11.6716 3.5 12.5C3.5 13.3284 4.17157 14 5 14Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.25" />
        <path d="M5 5C5.82843 5 6.5 4.32843 6.5 3.5C6.5 2.67157 5.82843 2 5 2C4.17157 2 3.5 2.67157 3.5 3.5C3.5 4.32843 4.17157 5 5 5Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.25" />
        <path d="M13 10.5C13.8284 10.5 14.5 9.82843 14.5 9C14.5 8.17157 13.8284 7.5 13 7.5C12.1716 7.5 11.5 8.17157 11.5 9C11.5 9.82843 12.1716 10.5 13 10.5Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.25" />
        <path d="M11.5 9H9.5C9.03426 9 8.57493 8.89157 8.15836 8.68328C7.74179 8.475 7.37944 8.17259 7.1 7.8L5 5V11" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.25" />
      </svg>
    </div>
    Available in version {minVersion} and later
  </div>;

문자열을 [검색](/ko/reference/functions/regular-functions/string-search-functions)하는 함수와 문자열을 [치환](/ko/reference/functions/regular-functions/string-replace-functions)하는 함수는 별도로 설명합니다.

<Note>
  아래 문서는 `system.functions` 시스템 테이블에서 생성되었습니다.
</Note>

{/*AUTOGENERATED_START*/}

<div id="CRC32">
  ## CRC32
</div>

도입 버전: v20.1.0

CRC-32-IEEE 802.3 다항식과 초기값 `0xffffffff`(zlib 구현)를 사용해 문자열의 CRC32 체크섬을 계산합니다.

**구문**

```sql theme={null}
CRC32(s)
```

**인수**

* `s` — CRC32를 계산할 대상 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열의 CRC32 체크섬을 반환합니다. [`UInt32`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT CRC32('ClickHouse')
```

```response title=Response theme={null}
┌─CRC32('ClickHouse')─┐
│          1538217360 │
└─────────────────────┘
```

<div id="CRC32IEEE">
  ## CRC32IEEE
</div>

도입 버전: v20.1.0

CRC-32-IEEE 802.3 다항식을 사용해 문자열의 CRC32 체크섬을 계산합니다.

**구문**

```sql theme={null}
CRC32IEEE(s)
```

**인수**

* `s` — CRC32를 계산할 대상 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열의 CRC32 체크섬을 반환합니다. [`UInt32`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT CRC32IEEE('ClickHouse');
```

```response title=Response theme={null}
┌─CRC32IEEE('ClickHouse')─┐
│              3089448422 │
└─────────────────────────┘
```

<div id="CRC64">
  ## CRC64
</div>

도입 버전: v20.1.0

CRC-64-ECMA 다항식을 사용해 문자열의 CRC64 체크섬을 계산합니다.

**구문**

```sql theme={null}
CRC64(s)
```

**인수**

* `s` — CRC64를 계산할 대상 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열의 CRC64 체크섬을 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT CRC64('ClickHouse');
```

```response title=Response theme={null}
┌──CRC64('ClickHouse')─┐
│ 12126588151325169346 │
└──────────────────────┘
```

<div id="appendTrailingCharIfAbsent">
  ## appendTrailingCharIfAbsent
</div>

도입 버전: v1.1.0

`s`가 비어 있지 않고 문자 `c`로 끝나지 않으면 문자열 `s`의 끝에 문자 `c`를 추가합니다.

**구문**

```sql theme={null}
appendTrailingCharIfAbsent(s, c)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `c` — 없으면 덧붙일 문자입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열 `s`가 `c`로 끝나지 않으면 끝에 문자 `c`를 덧붙인 문자열 `s`를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT appendTrailingCharIfAbsent('https://example.com', '/');
```

```response title=Response theme={null}
┌─appendTraili⋯.com', '/')─┐
│ https://example.com/     │
└──────────────────────────┘
```

<div id="ascii">
  ## ascii
</div>

도입 버전: v22.11.0

문자열 `s`의 첫 번째 문자의 ASCII 코드 포인트를 `Int32`로 반환합니다.

**구문**

```sql theme={null}
ascii(s)
```

**인수**

* `s` — `String` 입력값입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

첫 번째 문자의 ASCII 코드 포인트를 반환합니다. `s`가 비어 있으면 결과는 `0`입니다. 첫 번째 문자가 ASCII 문자가 아니거나 UTF-16의 Latin-1 Supplement 범위에 속하지 않으면 결과는 정의되지 않습니다. [`Int32`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT ascii('234')
```

```response title=Response theme={null}
┌─ascii('234')─┐
│           50 │
└──────────────┘
```

<div id="base32Decode">
  ## base32Decode
</div>

도입 버전: v25.6.0

[Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) (RFC 4648) 문자열을 디코딩합니다.
문자열이 올바른 Base32 인코딩 형식이 아니면 예외가 발생합니다.

**구문**

```sql theme={null}
base32Decode(encoded)
```

**인수**

* `encoded` — `String` 컬럼 또는 상수. [`String`](/ko/reference/data-types/string)

**반환 값**

인수를 디코딩한 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base32Decode('IVXGG33EMVSA====');
```

```response title=Response theme={null}
┌─base32Decode('IVXGG33EMVSA====')─┐
│ Encoded                          │
└──────────────────────────────────┘
```

<div id="base32Encode">
  ## base32Encode
</div>

도입 버전: v25.6.0

문자열을 [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6)로 인코딩합니다.

**구문**

```sql theme={null}
base32Encode(plaintext)
```

**인수**

* `plaintext` — 인코딩할 평문입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수의 인코딩된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base32Encode('Encoded')
```

```response title=Response theme={null}
┌─base32Encode('Encoded')─┐
│ IVXGG33EMVSA====        │
└─────────────────────────┘
```

<div id="base58Decode">
  ## base58Decode
</div>

도입 버전: v22.7.0

[Base58](https://datatracker.ietf.org/doc/html/draft-msporny-base58-03#section-3) 문자열을 디코딩합니다.
문자열이 유효한 Base58 인코딩 형식이 아니면 예외가 발생합니다.
선택 사항인 두 번째 인수 `expected_size`를 지정하면 최적화된 고정 크기 디코더를 사용할 수 있습니다.
현재 지원되는 값은 32와 64입니다. 그 밖의 값에는 범용 디코더가 사용됩니다.
최적화된 디코더를 선택했지만 입력을 정확히 해당 바이트 수로 디코딩할 수 없는 경우,
함수는 예외를 발생시킵니다(`tryBase58Decode`는 빈 문자열을 반환).

**구문**

```sql theme={null}
base58Decode(encoded[, expected_size])
```

**인수**

* `encoded` — 디코딩할 String 타입의 컬럼 또는 상수입니다. [`String`](/ko/reference/data-types/string)
* `expected_size` — 선택 사항입니다. 디코딩 후 예상 크기(바이트 단위)입니다. 값이 32 또는 64이면 최적화된 디코더를 사용하고, 그 외의 값이면 일반 디코더를 사용합니다. [`UInt8, UInt16, UInt32, or UInt64`](/ko/reference/data-types/int-uint)

**반환 값**

인수의 디코딩된 값을 포함하는 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base58Decode('JxF12TrwUP45BMd');
```

```response title=Response theme={null}
┌─base58Decode⋯rwUP45BMd')─┐
│ Hello World              │
└──────────────────────────┘
```

<div id="base58Encode">
  ## base58Encode
</div>

도입 버전: v22.7.0

문자열을 [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) 방식으로 인코딩합니다.

**구문**

```sql theme={null}
base58Encode(plaintext)
```

**인수**

* `plaintext` — 인코딩할 평문입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수의 인코딩 결과를 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base58Encode('ClickHouse');
```

```response title=Response theme={null}
┌─base58Encode('ClickHouse')─┐
│ 4nhk8K7GHXf6zx             │
└────────────────────────────┘
```

<div id="base64Decode">
  ## base64Decode
</div>

도입 버전: v18.16.0

RFC 4648에 따라 [Base64](https://en.wikipedia.org/wiki/Base64) 형식의 문자열을 디코딩합니다.
오류가 발생할 경우 예외를 발생시킵니다.

**구문**

```sql theme={null}
base64Decode(encoded)
```

**별칭**: `FROM_BASE64`

**인수**

* `encoded` — 디코딩할 String 컬럼 또는 상수입니다. 문자열이 올바른 Base64 인코딩 형식이 아니면 예외가 발생합니다. [`String`](/ko/reference/data-types/string)

**반환 값**

디코딩된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base64Decode('Y2xpY2tob3VzZQ==')
```

```response title=Response theme={null}
┌─base64Decode('Y2xpY2tob3VzZQ==')─┐
│ clickhouse                       │
└──────────────────────────────────┘
```

<div id="base64Encode">
  ## base64Encode
</div>

도입 버전: v18.16.0

RFC 4648에 따라 문자열을 [Base64](https://en.wikipedia.org/wiki/Base64) 형식으로 인코딩합니다.

**구문**

```sql theme={null}
base64Encode(plaintext)
```

**별칭**: `TO_BASE64`

**인수**

* `plaintext` — 디코딩할 평문 컬럼 또는 상수입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수의 인코딩된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base64Encode('clickhouse')
```

```response title=Response theme={null}
┌─base64Encode('clickhouse')─┐
│ Y2xpY2tob3VzZQ==           │
└────────────────────────────┘
```

<div id="base64URLDecode">
  ## base64URLDecode
</div>

도입 버전: v24.6.0

RFC 4648에 따라 URL 안전 문자 집합을 사용한 [Base64](https://en.wikipedia.org/wiki/Base64) 표현으로 된 문자열을 디코딩합니다.
오류가 발생하면 예외를 발생시킵니다.

**구문**

```sql theme={null}
base64URLDecode(encoded)
```

**인수**

* `encoded` — 인코딩할 `String` 컬럼 또는 상수입니다. 문자열이 유효한 Base64로 인코딩되어 있지 않으면 예외가 발생합니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수의 디코딩된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')
```

```response title=Response theme={null}
┌─base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐
│ https://clickhouse.com                            │
└───────────────────────────────────────────────────┘
```

<div id="base64URLEncode">
  ## base64URLEncode
</div>

도입 버전: v18.16.0

URL에 안전한 알파벳을 사용해 문자열을 [Base64](https://datatracker.ietf.org/doc/html/rfc4648#section-4)(RFC 4648) 형식으로 인코딩합니다.

**구문**

```sql theme={null}
base64URLEncode(plaintext)
```

**인수**

* `plaintext` — 인코딩할 평문 컬럼 또는 상수입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수의 인코딩된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT base64URLEncode('https://clickhouse.com')
```

```response title=Response theme={null}
┌─base64URLEncode('https://clickhouse.com')─┐
│ aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ            │
└───────────────────────────────────────────┘
```

<div id="basename">
  ## basename
</div>

도입 버전: v20.1.0

마지막 슬래시 또는 백슬래시 뒤에 있는 문자열의 끝부분을 추출합니다.
이 함수는 경로에서 파일 이름을 추출할 때 자주 사용됩니다.

**구문**

```sql theme={null}
basename(expr)
```

**인수**

* `expr` — 문자열 표현식입니다. 백슬래시는 이스케이프해야 합니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 문자열에서 마지막 슬래시 또는 백슬래시 뒤의 부분을 반환합니다. 입력 문자열이 슬래시 또는 백슬래시로 끝나면 함수는 빈 문자열을 반환합니다. 슬래시나 백슬래시가 없으면 원래 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**Unix 경로에서 파일 이름 추출**

```sql title=Query theme={null}
SELECT 'some/long/path/to/file' AS a, basename(a)
```

```response title=Response theme={null}
┌─a──────────────────────┬─basename('some/long/path/to/file')─┐
│ some/long/path/to/file │ file                               │
└────────────────────────┴────────────────────────────────────┘
```

**Windows 경로에서 파일명 추출**

```sql title=Query theme={null}
SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
```

```response title=Response theme={null}
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file                                   │
└────────────────────────┴────────────────────────────────────────┘
```

**경로 구분자가 없는 String**

```sql title=Query theme={null}
SELECT 'some-file-name' AS a, basename(a)
```

```response title=Response theme={null}
┌─a──────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name             │
└────────────────┴────────────────────────────┘
```

<div id="byteHammingDistance">
  ## byteHammingDistance
</div>

도입 버전: v23.9.0

두 바이트 문자열 사이의 [해밍 거리](https://en.wikipedia.org/wiki/Hamming_distance)를 계산합니다.

**구문**

```sql theme={null}
byteHammingDistance(s1, s2)
```

**별칭**: `mismatches`

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 문자열 간의 해밍 거리를 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT byteHammingDistance('karolin', 'kathrin')
```

```response title=Response theme={null}
┌─byteHammingDistance('karolin', 'kathrin')─┐
│                                         3 │
└───────────────────────────────────────────┘
```

<div id="caseFoldUTF8">
  ## caseFoldUTF8
</div>

도입 버전: v26.3.0

UTF-8 문자열에 유니코드 대소문자 접기를 적용하여, 대소문자를 구분하지 않는 비교에 적합한 소문자와 유사한 정규화된 형태로 변환합니다.

표준 유니코드 대소문자 접기를 적용합니다. 대소문자 접기의 영향을 받지 않는 호환 문자는 유지되지만
(예: 로마 숫자, 동그라미 숫자), `ﬃ` 같은 일부 합자는 유니코드 대소문자 접기 자체에서 확장되므로 여전히 분해됩니다.

**구문**

```sql theme={null}
caseFoldUTF8(str)
```

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

케이스 폴딩된 UTF-8 문자열입니다. [`String`](/ko/reference/data-types/string)

**예시**

**기본 케이스 폴딩**

```sql title=Query theme={null}
SELECT caseFoldUTF8('Straße')
```

```response title=Response theme={null}
┌─caseFoldUTF8('Straße')─┐
│ strasse                 │
└─────────────────────────┘
```

<div id="compareSubstrings">
  ## compareSubstrings
</div>

도입 버전: v25.2.0

두 문자열을 사전식 순서로 비교합니다.

**구문**

```sql theme={null}
compareSubstrings(s1, s2, s1_offset, s2_offset, num_bytes)
```

**인수**

* `s1` — 비교할 첫 번째 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 비교할 두 번째 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s1_offset` — 비교를 시작할 `s1` 내 위치(0부터 시작)입니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `s2_offset` — 비교를 시작할 `s2` 내 위치(0부터 시작하는 인덱스)입니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `num_bytes` — 두 문자열에서 비교할 최대 바이트 수입니다. `s1_offset`(또는 `s2_offset`) + `num_bytes`가 입력 문자열의 끝을 넘으면 `num_bytes`는 그에 맞게 줄어듭니다. [`UInt*`](/ko/reference/data-types/int-uint)

**반환 값**

반환 값:

* `s1`\[`s1_offset` : `s1_offset` + `num_bytes`] \< `s2`\[`s2_offset` : `s2_offset` + `num_bytes`]이면 `-1`을 반환합니다.
* `s1`\[`s1_offset` : `s1_offset` + `num_bytes`] = `s2`\[`s2_offset` : `s2_offset` + `num_bytes`]이면 `0`을 반환합니다.
* `s1`\[`s1_offset` : `s1_offset` + `num_bytes`] > `s2`\[`s2_offset` : `s2_offset` + `num_bytes`]이면 `1`을 반환합니다.
  [`Int8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result
```

```response title=Response theme={null}
┌─result─┐
│      0 │
└────────┘
```

<div id="concat">
  ## concat
</div>

도입 버전: v1.1.0

지정된 인수를 연결합니다.

[`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring) 타입이 아닌 인수는 기본 직렬화를 사용해 문자열로 변환됩니다.
이 경우 성능이 저하되므로 String/FixedString이 아닌 인수는 사용하지 않는 것이 좋습니다.

**구문**

```sql theme={null}
concat([s1, s2, ...])
```

**인수**

* `s1, s2, ...` — 개수 제한이 없는 임의의 타입의 값입니다. [`Any`](/ko/reference/data-types)

**반환 값**

인수를 이어 붙여 생성한 String을 반환합니다. 인수 중 하나라도 `NULL`이면 함수는 `NULL`을 반환합니다. 인수가 없으면 빈 문자열을 반환합니다. [`Nullable(String)`](/ko/reference/data-types/nullable)

**예시**

**문자열 연결**

```sql title=Query theme={null}
SELECT concat('Hello, ', 'World!')
```

```response title=Response theme={null}
┌─concat('Hello, ', 'World!')─┐
│ Hello, World!               │
└─────────────────────────────┘
```

**숫자 이어 붙이기**

```sql title=Query theme={null}
SELECT concat(42, 144)
```

```response title=Response theme={null}
┌─concat(42, 144)─┐
│ 42144           │
└─────────────────┘
```

<div id="concatAssumeInjective">
  ## concatAssumeInjective
</div>

도입 버전: v1.1.0

[`concat`](#concat)과 비슷하지만 `concat(s1, s2, ...) → sn`이 단사적이라고 가정합니다.
즉, 서로 다른 인수에 대해서는 서로 다른 결과를 반환합니다.

`GROUP BY`를 최적화하는 데 사용할 수 있습니다.

**구문**

```sql theme={null}
concatAssumeInjective([s1, s2, ...])
```

**인수**

* `s1, s2, ...` — 임의의 타입 값을 개수 제한 없이 받을 수 있습니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)

**반환 값**

인수를 연결해 생성된 문자열을 반환합니다. 인수 값 중 하나라도 `NULL`이면 함수는 `NULL`을 반환합니다. 인수가 전달되지 않으면 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**GROUP BY 최적화**

```sql title=Query theme={null}
SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2)
```

```response title=Response theme={null}
┌─concat(key1, key2)─┬─sum(value)─┐
│ Hello, World!      │          3 │
│ Hello, World!      │          2 │
│ Hello, World       │          3 │
└────────────────────┴────────────┘
```

<div id="concatWithSeparator">
  ## concatWithSeparator
</div>

도입 버전: v22.12.0

제공된 문자열을 지정된 구분자를 사이에 두고 연결합니다.

**구문**

```sql theme={null}
concatWithSeparator(sep[, exp1, exp2, ...])
```

**별칭**: `concat_ws`

**인수**

* `sep` — 사용할 구분자입니다. [`const String`](/ko/reference/data-types/string) 또는 [`const FixedString`](/ko/reference/data-types/fixedstring)
* `exp1, exp2, ...` — 연결할 표현식입니다. `String` 또는 `FixedString` 타입이 아닌 인수는 기본 직렬화(serialization)를 사용해 문자열로 변환됩니다. 이 경우 성능이 저하되므로 `String`/`FixedString`이 아닌 인수는 사용하지 않는 것이 좋습니다. [`Any`](/ko/reference/data-types)

**반환 값**

인수를 연결해 생성된 String을 반환합니다. 인수 값 중 하나라도 `NULL`이면 함수는 `NULL`을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT concatWithSeparator('a', '1', '2', '3', '4')
```

```response title=Response theme={null}
┌─concatWithSeparator('a', '1', '2', '3', '4')─┐
│ 1a2a3a4                                      │
└──────────────────────────────────────────────┘
```

<div id="concatWithSeparatorAssumeInjective">
  ## concatWithSeparatorAssumeInjective
</div>

도입 버전: v22.12.0

[`concatWithSeparator`](#concatWithSeparator)와 비슷하지만, `concatWithSeparator(sep[,exp1, exp2, ... ]) → result`가 단사적이라고 가정합니다.
함수는 서로 다른 인수에 대해 서로 다른 결과를 반환할 때 단사적이라고 합니다.

`GROUP BY` 최적화에 사용할 수 있습니다.

**구문**

```sql theme={null}
concatWithSeparatorAssumeInjective(sep[, exp1, exp2, ... ])
```

**인수**

* `sep` — 사용할 구분자입니다. [`const String`](/ko/reference/data-types/string) 또는 [`const FixedString`](/ko/reference/data-types/fixedstring)
* `exp1, exp2, ...` — 연결할 표현식입니다. `String` 또는 `FixedString` 타입이 아닌 인수는 기본 직렬화(serialization)를 사용해 문자열로 변환됩니다. 이로 인해 성능이 저하되므로 `String`/`FixedString`이 아닌 인수는 사용하지 않는 것이 좋습니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)

**반환 값**

인수를 연결해 생성한 String을 반환합니다. 인수 값 중 하나라도 `NULL`이면 함수는 `NULL`을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
CREATE TABLE user_data (
user_id UInt32,
first_name String,
last_name String,
score UInt32
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO user_data VALUES
(1, 'John', 'Doe', 100),
(2, 'Jane', 'Smith', 150),
(3, 'John', 'Wilson', 120),
(4, 'Jane', 'Smith', 90);

SELECT
    concatWithSeparatorAssumeInjective('-', first_name, last_name) as full_name,
    sum(score) as total_score
FROM user_data
GROUP BY concatWithSeparatorAssumeInjective('-', first_name, last_name);
```

```response title=Response theme={null}
┌─full_name───┬─total_score─┐
│ Jane-Smith  │         240 │
│ John-Doe    │         100 │
│ John-Wilson │         120 │
└─────────────┴─────────────┘
```

<div id="conv">
  ## conv
</div>

도입 버전: v25.10.0

서로 다른 진법 사이에서 숫자를 변환합니다.

이 함수는 숫자를 한 진법에서 다른 진법으로 변환합니다. 2부터 36까지의 진법을 지원합니다.
10보다 큰 진법에서는 문자 A-Z(대소문자 구분 없음)를 사용해 10\~35를 나타냅니다.

이 함수는 MySQL의 CONV() 함수와 호환됩니다.

**구문**

```sql theme={null}
conv(number, from_base, to_base)
```

**인수**

* `number` — 변환할 숫자입니다. 문자열 또는 숫자형일 수 있습니다. - `from_base` — 원래 진법(2-36)입니다. 정수여야 합니다. - `to_base` — 대상 진법(2-36)입니다. 정수여야 합니다.

**반환 값**

대상 진법으로 나타낸 숫자의 문자열 형식입니다.

**예시**

**10진수를 2진수로 변환**

```sql title=Query theme={null}
SELECT conv('10', 10, 2)
```

```response title=Response theme={null}
1010
```

**16진수를 10진수로 변환**

```sql title=Query theme={null}
SELECT conv('FF', 16, 10)
```

```response title=Response theme={null}
255
```

**음수로 변환하기**

```sql title=Query theme={null}
SELECT conv('-1', 10, 16)
```

```response title=Response theme={null}
FFFFFFFFFFFFFFFF
```

**이진수를 팔진수로 변환**

```sql title=Query theme={null}
SELECT conv('1010', 2, 8)
```

```response title=Response theme={null}
12
```

<div id="convertCharset">
  ## convertCharset
</div>

도입 버전: v1.1.0

문자열 `s`를 인코딩 `from`에서 인코딩 `to`로 변환해 반환합니다.

**구문**

```sql theme={null}
convertCharset(s, from, to)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `from` — 원본 문자 인코딩입니다. [`String`](/ko/reference/data-types/string)
* `to` — 대상 문자 인코딩입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열 `s`를 인코딩 `from`에서 인코딩 `to`로 변환한 값을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT convertCharset('Café', 'UTF-8', 'ISO-8859-1');
```

```response title=Response theme={null}
┌─convertChars⋯SO-8859-1')─┐
│ Caf�                     │
└──────────────────────────┘
```

<div id="damerauLevenshteinDistance">
  ## damerauLevenshteinDistance
</div>

도입 버전: v24.1.0

두 바이트 문자열 간의 [Damerau-Levenshtein 거리](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance)를 계산합니다.

**구문**

```sql theme={null}
damerauLevenshteinDistance(s1, s2)
```

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 문자열 사이의 Damerau-Levenshtein 거리를 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT damerauLevenshteinDistance('clickhouse', 'mouse')
```

```response title=Response theme={null}
┌─damerauLevenshteinDistance('clickhouse', 'mouse')─┐
│                                                 6 │
└───────────────────────────────────────────────────┘
```

<div id="decodeHTMLComponent">
  ## decodeHTMLComponent
</div>

도입 버전: v23.9.0

문자열에 포함된 HTML 엔터티를 해당하는 문자로 디코딩합니다.

**구문**

```sql theme={null}
decodeHTMLComponent(s)
```

**인수**

* `s` — 디코딩할 HTML 엔터티가 포함된 String입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

HTML 엔터티가 디코딩된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT decodeHTMLComponent('&lt;div&gt;Hello &amp; &quot;World&quot;&lt;/div&gt;')
```

```response title=Response theme={null}
┌─decodeHTMLComponent('&lt;div&gt;Hello &amp; &quot;World&quot;&lt;/div&gt;')─┐
│ <div>Hello & "World"</div>                                                  │
└─────────────────────────────────────────────────────────────────────────────┘
```

<div id="decodeXMLComponent">
  ## decodeXMLComponent
</div>

Introduced in: v21.2.0

문자열에 있는 XML 엔터티를 해당 문자로 디코딩합니다.

**구문**

```sql theme={null}
decodeXMLComponent(s)
```

**인수**

* `s` — 디코딩할 XML 엔터티가 포함된 String입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

제공된 문자열에서 XML 엔터티를 디코딩한 String을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT decodeXMLComponent('&lt;tag&gt;Hello &amp; World&lt;/tag&gt;')
```

```response title=Response theme={null}
┌─decodeXMLCom⋯;/tag&gt;')─┐
│ <tag>Hello & World</tag> │
└──────────────────────────┘
```

<div id="editDistance">
  ## editDistance
</div>

도입 버전: v23.9.0

두 바이트 문자열 간의 [편집 거리](https://en.wikipedia.org/wiki/Edit_distance)를 계산합니다.

**구문**

```sql theme={null}
editDistance(s1, s2)
```

**별칭**: `levenshteinDistance`

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 문자열 간의 편집 거리를 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT editDistance('clickhouse', 'mouse')
```

```response title=Response theme={null}
┌─editDistance('clickhouse', 'mouse')─┐
│                                   6 │
└─────────────────────────────────────┘
```

<div id="editDistanceUTF8">
  ## editDistanceUTF8
</div>

도입 버전: v24.6.0

두 UTF8 문자열 간의 [편집 거리](https://en.wikipedia.org/wiki/Edit_distance)를 계산합니다.

**구문**

```sql theme={null}
editDistanceUTF8(s1, s2)
```

**별칭**: `levenshteinDistanceUTF8`

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 UTF8 문자열 간의 편집 거리를 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT editDistanceUTF8('我是谁', '我是我')
```

```response title=Response theme={null}
┌─editDistanceUTF8('我是谁', '我是我')──┐
│                                   1 │
└─────────────────────────────────────┘
```

<div id="encodeXMLComponent">
  ## encodeXMLComponent
</div>

도입 버전: v21.1.0

문자열을 XML 텍스트 노드나 속성에 넣을 수 있도록 문자를 이스케이프합니다.

**구문**

```sql theme={null}
encodeXMLComponent(s)
```

**인수**

* `s` — 이스케이프할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

이스케이프된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
    '<tag>Hello & "World"</tag>' AS original,
    encodeXMLComponent('<tag>Hello & "World"</tag>') AS xml_encoded;
```

```response title=Response theme={null}
┌─original───────────────────┬─xml_encoded──────────────────────────────────────────┐
│ <tag>Hello & "World"</tag> │ &lt;tag&gt;Hello &amp; &quot;World&quot;&lt;/tag&gt; │
└────────────────────────────┴──────────────────────────────────────────────────────┘
```

<div id="endsWith">
  ## endsWith
</div>

도입 버전: v1.1.0

문자열이 지정된 접미사로 끝나는지 확인합니다.

**구문**

```sql theme={null}
endsWith(s, suffix)
```

**인수**

* `s` — 검사할 `String`. [`String`](/ko/reference/data-types/string)
* `suffix` — 검사할 접미사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 `suffix`로 끝나면 `1`을 반환하고, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT endsWith('ClickHouse', 'House');
```

```response title=Response theme={null}
┌─endsWith('Cl⋯', 'House')─┐
│                        1 │
└──────────────────────────┘
```

<div id="endsWithCaseInsensitive">
  ## endsWithCaseInsensitive
</div>

도입 버전: v25.10.0

문자열이 지정된 대소문자 구분 없는 접미사로 끝나는지 확인합니다.

**구문**

```sql theme={null}
endsWithCaseInsensitive(s, suffix)
```

**인수**

* `s` — 검사할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `suffix` — 대소문자를 구분하지 않고 검사할 접미사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 대소문자를 구분하지 않는 `suffix`로 끝나면 `1`을, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT endsWithCaseInsensitive('ClickHouse', 'HOUSE');
```

```response title=Response theme={null}
┌─endsWithCaseInsensitive('Cl⋯', 'HOUSE')─┐
│                                       1 │
└─────────────────────────────────────────┘
```

<div id="endsWithCaseInsensitiveUTF8">
  ## endsWithCaseInsensitiveUTF8
</div>

도입 버전: v25.10.0

문자열 `s`가 대소문자를 구분하지 않는 `suffix`로 끝나는지 여부를 반환합니다.
문자열에 유효한 UTF-8로 인코딩된 텍스트가 포함되어 있다고 가정합니다.
이 가정이 충족되지 않아도 예외는 발생하지 않으며, 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
endsWithCaseInsensitiveUTF8(s, suffix)
```

**인수**

* `s` — 확인할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `suffix` — 확인할, 대소문자를 구분하지 않는 접미사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 대소문자를 구분하지 않는 `suffix`로 끝나면 `1`을 반환하고, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT endsWithCaseInsensitiveUTF8('данных', 'ых');
```

```response title=Response theme={null}
┌─endsWithCaseInsensitiveUTF8('данных', 'ых')─┐
│                                           1 │
└─────────────────────────────────────────────┘
```

<div id="endsWithUTF8">
  ## endsWithUTF8
</div>

도입 버전: v23.8.0

문자열 `s`가 `suffix`로 끝나는지 여부를 반환합니다.
문자열이 유효한 UTF-8로 인코딩된 텍스트라고 가정합니다.
이 가정이 충족되지 않아도 예외가 발생하지 않으며, 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
endsWithUTF8(s, suffix)
```

**인수**

* `s` — 확인할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `suffix` — 확인할 접미사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 `suffix`로 끝나면 `1`을 반환하고, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT endsWithUTF8('данных', 'ых');
```

```response title=Response theme={null}
┌─endsWithUTF8('данных', 'ых')─┐
│                            1 │
└──────────────────────────────┘
```

<div id="extractTextFromHTML">
  ## extractTextFromHTML
</div>

도입 버전: v21.3.0

HTML 또는 XHTML의 텍스트 콘텐츠를 추출합니다.

이 함수는 HTML 태그, 주석, script/style 요소를 제거하고 텍스트 콘텐츠만 남깁니다. 구체적으로 다음을 처리합니다.

* 모든 HTML/XML 태그 제거
* 주석 제거 (`{/* */}`)
* script 및 style 요소와 해당 콘텐츠 제거
* CDATA 섹션 처리(원문 그대로 복사)
* 공백의 적절한 처리 및 정규화

참고: HTML 엔터티는 디코딩되지 않으므로, 필요한 경우 별도의 함수로 처리해야 합니다.

**구문**

```sql theme={null}
extractTextFromHTML(html)
```

**인수**

* `html` — 텍스트를 추출할 HTML 콘텐츠를 포함하는 String입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

정규화된 공백이 적용된 텍스트 콘텐츠를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT extractTextFromHTML('
<html>
    <head><title>Page Title</title></head>
    <body>
        <p>Hello <b>World</b>!</p>
        <script>alert("test");</script>
        <!-- comment -->
    </body>
</html>
');
```

```response title=Response theme={null}
┌─extractTextFromHTML('<html><head>...')─┐
│ Page Title Hello World!                │
└────────────────────────────────────────┘
```

<div id="firstLine">
  ## firstLine
</div>

도입 버전: v23.7.0

여러 줄 문자열에서 첫 번째 줄을 반환합니다.

**구문**

```sql theme={null}
firstLine(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 문자열의 첫 번째 줄을 반환합니다. 줄 구분자가 없으면 전체 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT firstLine('foo\\nbar\\nbaz')
```

```response title=Response theme={null}
┌─firstLine('foo\nbar\nbaz')─┐
│ foo                        │
└────────────────────────────┘
```

<div id="idnaDecode">
  ## idnaDecode
</div>

도입 버전: v24.1.0

[Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications) (IDNA) 메커니즘에 따라 도메인 이름의 유니코드(UTF-8) 표현(ToUnicode 알고리즘)을 반환합니다.
오류가 발생하면(예: 입력이 유효하지 않은 경우) 입력 문자열을 반환합니다.
대소문자 정규화로 인해 [`idnaEncode()`](#idnaEncode)와 [`idnaDecode()`](#idnaDecode)를 반복 적용해도 원래 문자열이 반환된다고 보장되지는 않습니다.

**구문**

```sql theme={null}
idnaDecode(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 값에 적용되는 IDNA 메커니즘에 따라 입력 문자열의 유니코드(UTF-8) 표현을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')
```

```response title=Response theme={null}
┌─idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')─┐
│ straße.münchen.de                             │
└───────────────────────────────────────────────┘
```

<div id="idnaEncode">
  ## idnaEncode
</div>

도입 버전: v24.1.0

[Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications) (IDNA) 메커니즘에 따라 도메인 이름의 ASCII 표현(ToASCII 알고리즘)을 반환합니다.
입력 문자열은 UTF로 인코딩되어 있어야 하며 ASCII 문자열로 변환 가능해야 합니다. 그렇지 않으면 예외가 발생합니다.

<Note>
  퍼센트 디코딩이나 탭, 공백 또는 제어 문자의 제거는 수행되지 않습니다.
</Note>

**구문**

```sql theme={null}
idnaEncode(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 값에 적용된 IDNA 메커니즘에 따라 입력 문자열의 ASCII 표현을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT idnaEncode('straße.münchen.de')
```

```response title=Response theme={null}
┌─idnaEncode('straße.münchen.de')─────┐
│ xn--strae-oqa.xn--mnchen-3ya.de     │
└─────────────────────────────────────┘
```

<div id="initcap">
  ## initcap
</div>

도입 버전: v23.7.0

각 단어의 첫 글자를 대문자로, 나머지 글자는 소문자로 변환합니다.
단어는 영숫자가 아닌 문자로 구분된 영숫자 문자 시퀀스입니다.

<Note>
  `initcap`는 각 단어의 첫 글자만 대문자로 변환하므로 아포스트로피나 대문자가 포함된 단어에서는 예상하지 못한 동작이 발생할 수 있습니다.
  이는 알려진 동작이며 현재로서는 수정할 계획이 없습니다.
</Note>

**구문**

```sql theme={null}
initcap(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

각 단어의 첫 글자를 대문자로 변환한 `s`를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT initcap('building for fast')
```

```response title=Response theme={null}
┌─initcap('building for fast')─┐
│ Building For Fast            │
└──────────────────────────────┘
```

**아포스트로피 또는 대문자가 포함된 단어의 알려진 동작 예시**

```sql title=Query theme={null}
SELECT initcap('John''s cat won''t eat.');
```

```response title=Response theme={null}
┌─initcap('Joh⋯n\'t eat.')─┐
│ John'S Cat Won'T Eat.    │
└──────────────────────────┘
```

<div id="initcapUTF8">
  ## initcapUTF8
</div>

도입 버전: v23.7.0

[`initcap`](#initcap)와 마찬가지로 `initcapUTF8`은 각 단어의 첫 글자를 대문자로, 나머지 글자를 소문자로 변환합니다.
문자열이 유효한 UTF-8로 인코딩된 텍스트를 포함한다고 가정합니다.
이 가정이 충족되지 않아도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

<Note>
  이 함수는 언어를 감지하지 않습니다. 예를 들어 터키어에서는 결과가 완전히 정확하지 않을 수 있습니다(i/İ 대 i/I).
  코드 포인트의 대문자와 소문자에서 UTF-8 바이트 시퀀스 길이가 서로 다르면 해당 코드 포인트의 결과가 올바르지 않을 수 있습니다.
</Note>

**구문**

```sql theme={null}
initcapUTF8(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

각 단어의 첫 글자를 대문자로 변환한 `s`를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT initcapUTF8('не тормозит')
```

```response title=Response theme={null}
┌─initcapUTF8('не тормозит')─┐
│ Не Тормозит                │
└────────────────────────────┘
```

<div id="isValidASCII">
  ## isValidASCII
</div>

도입 버전: v25.9.0

입력 String 또는 FixedString이 ASCII 바이트(0x00–0x7F)만 포함하면 1을, 그렇지 않으면 0을 반환합니다. 입력이 유효한 ASCII인 경우에 최적화되어 있습니다.

**구문**

```sql theme={null}
isValidASCII(str)
```

**별칭**: `isASCII`

**인수**

* 없음.

**반환 값**

**예시**

**isValidASCII**

```sql title=Query theme={null}
SELECT isValidASCII('hello') AS is_ascii, isValidASCII('你好') AS is_not_ascii
```

```response title=Response theme={null}
```

<div id="isValidUTF8">
  ## isValidUTF8
</div>

도입 버전: v20.1.0

바이트 집합이 올바른 UTF-8 인코딩 텍스트인지 확인합니다.

**구문**

```sql theme={null}
isValidUTF8(s)
```

**인수**

* `s` — UTF-8로 인코딩된 문자열이 유효한지 검사할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

바이트 집합이 유효한 UTF-8 인코딩 텍스트를 구성하면 `1`을, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT isValidUTF8('\\xc3\\xb1') AS valid, isValidUTF8('\\xc3\\x28') AS invalid
```

```response title=Response theme={null}
┌─valid─┬─invalid─┐
│     1 │       0 │
└───────┴─────────┘
```

<div id="jaroSimilarity">
  ## jaroSimilarity
</div>

도입 버전: v24.1.0

두 바이트 문자열 사이의 [Jaro 유사도](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#Jaro_similarity)를 계산합니다.

**구문**

```sql theme={null}
jaroSimilarity(s1, s2)
```

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 문자열 사이의 Jaro 유사도를 반환합니다. [`Float64`](/ko/reference/data-types/float)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT jaroSimilarity('clickhouse', 'click')
```

```response title=Response theme={null}
┌─jaroSimilarity('clickhouse', 'click')─┐
│                    0.8333333333333333 │
└───────────────────────────────────────┘
```

<div id="jaroWinklerSimilarity">
  ## jaroWinklerSimilarity
</div>

도입 버전: v24.1.0

두 바이트 문자열 간의 [Jaro-Winkler 유사도](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance)를 계산합니다.

**구문**

```sql theme={null}
jaroWinklerSimilarity(s1, s2)
```

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 문자열 사이의 Jaro-Winkler 유사도를 반환합니다. [`Float64`](/ko/reference/data-types/float)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT jaroWinklerSimilarity('clickhouse', 'click')
```

```response title=Response theme={null}
┌─jaroWinklerSimilarity('clickhouse', 'click')─┐
│                           0.8999999999999999 │
└──────────────────────────────────────────────┘
```

<div id="left">
  ## left
</div>

도입 버전: v22.1.0

문자열 `s`에서 왼쪽부터 지정한 `offset` 위치에서 시작하는 부분 문자열을 반환합니다.

**구문**

```sql theme={null}
left(s, offset)
```

**인수**

* `s` — 부분 문자열을 추출할 문자열입니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)
* `offset` — 오프셋의 바이트 수입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

다음을 반환합니다.

* `offset`이 양수이면, 문자열의 왼쪽에서 시작하는 `offset`바이트 길이의 `s` 부분 문자열입니다.
* `offset`이 음수이면, 문자열의 왼쪽에서 시작하는 `length(s) - |offset|`바이트 길이의 `s` 부분 문자열입니다.
* `length`가 `0`이면 빈 문자열을 반환합니다.
  [`String`](/ko/reference/data-types/string)

**예시**

**양수 오프셋**

```sql title=Query theme={null}
SELECT left('Hello World', 5)
```

```response title=Response theme={null}
Hello
```

**음수 OFFSET**

```sql title=Query theme={null}
SELECT left('Hello World', -6)
```

```response title=Response theme={null}
Hello
```

<div id="leftPad">
  ## leftPad
</div>

도입 버전: v21.8.0

결과 문자열의 길이가 지정된 `length`에 도달할 때까지 문자열 왼쪽을 공백 또는 지정된 문자열로(필요한 경우 여러 번) 채웁니다.

**구문**

```sql theme={null}
leftPad(string, length[, pad_string])
```

**별칭**: `lpad`

**인수**

* `string` — 패딩할 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `length` — 결과 문자열의 길이입니다. 값이 입력 문자열의 길이보다 작으면 입력 문자열은 `length`개의 문자로 잘립니다. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `pad_string` — 선택 사항입니다. 입력 문자열을 패딩하는 데 사용할 문자열입니다. 지정하지 않으면 입력 문자열은 공백으로 패딩됩니다. [`String`](/ko/reference/data-types/string)

**반환 값**

지정한 길이가 되도록 왼쪽이 패딩된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT leftPad('abc', 7, '*'), leftPad('def', 7)
```

```response title=Response theme={null}
┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐
│ ****abc                │     def           │
└────────────────────────┴───────────────────┘
```

<div id="leftPadUTF8">
  ## leftPadUTF8
</div>

도입된 버전: v21.8.0

결과 문자열이 지정된 길이에 이를 때까지 UTF8 문자열의 왼쪽을 공백 또는 지정한 문자열로 채웁니다(필요한 경우 여러 번 반복).
문자열 길이를 바이트 단위로 측정하는 [`leftPad`](#leftPad)와 달리, 이 함수는 문자열 길이를 코드 포인트 단위로 측정합니다.

**구문**

```sql theme={null}
leftPadUTF8(string, length[, pad_string])
```

**인수**

* `string` — 패딩할 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `length` — 결과 문자열의 길이입니다. 값이 입력 문자열의 길이보다 작으면 입력 문자열은 `length`자로 잘립니다. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `pad_string` — 선택 사항입니다. 입력 문자열을 채울 때 사용할 문자열입니다. 지정하지 않으면 입력 문자열은 공백으로 채워집니다. [`String`](/ko/reference/data-types/string)

**반환 값**

지정된 길이가 되도록 왼쪽이 채워진 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7)
```

```response title=Response theme={null}
┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐
│ ***абвг                     │    дежз                │
└─────────────────────────────┴────────────────────────┘
```

<div id="leftUTF8">
  ## leftUTF8
</div>

도입 버전: v22.1.0

UTF-8로 인코딩된 문자열 `s`에서 왼쪽을 기준으로 지정된 `offset`부터 부분 문자열을 반환합니다.

**구문**

```sql theme={null}
leftUTF8(s, offset)
```

**인수**

* `s` — 부분 문자열을 계산할 기준이 되는 UTF-8로 인코딩된 문자열입니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)
* `offset` — 오프셋의 바이트 수입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

반환 값:

* `offset`이 양수이면 문자열의 왼쪽부터 시작해 `offset`바이트인 `s`의 부분 문자열을 반환합니다.\n"
* `offset`이 음수이면 문자열의 왼쪽부터 시작해 `length(s) - |offset|`바이트인 `s`의 부분 문자열을 반환합니다.\n"
* `length`가 0이면 빈 문자열을 반환합니다.
  [`String`](/ko/reference/data-types/string)

**예시**

**양수 offset**

```sql title=Query theme={null}
SELECT leftUTF8('Привет', 4)
```

```response title=Response theme={null}
Прив
```

**음수 OFFSET**

```sql title=Query theme={null}
SELECT leftUTF8('Привет', -4)
```

```response title=Response theme={null}
Пр
```

<div id="lengthUTF8">
  ## lengthUTF8
</div>

도입 버전: v1.1.0

문자열의 길이를 바이트 수나 문자 수가 아닌 유니코드 코드 포인트 기준으로 반환합니다.
문자열에 유효한 UTF-8 인코딩 텍스트가 포함되어 있다고 가정합니다.
이 가정이 충족되지 않아도 예외는 발생하지 않으며, 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
lengthUTF8(s)
```

**별칭**: `CHARACTER_LENGTH`, `CHAR_LENGTH`

**인수**

* `s` — 유효한 UTF-8로 인코딩된 텍스트를 포함하는 String. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열 `s`의 길이를 유니코드 코드 포인트 기준으로 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT lengthUTF8('Здравствуй, мир!')
```

```response title=Response theme={null}
┌─lengthUTF8('Здравствуй, мир!')─┐
│                             16 │
└────────────────────────────────┘
```

<div id="lower">
  ## lower
</div>

도입 버전: v1.1.0

ASCII 문자열을 소문자로 변환합니다.

**구문**

```sql theme={null}
lower(s)
```

**별칭**: `lcase`

**인수**

* `s` — 소문자로 변환할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`를 소문자로 변환한 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT lower('CLICKHOUSE')
```

```response title=Response theme={null}
┌─lower('CLICKHOUSE')─┐
│ clickhouse          │
└─────────────────────┘
```

<div id="lowerUTF8">
  ## lowerUTF8
</div>

도입 버전: v1.1.0

문자열이 유효한 UTF-8 인코딩 텍스트를 포함한다고 가정하고, 해당 문자열을 소문자로 변환합니다. 이 가정이 충족되지 않아도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
lowerUTF8(input)
```

**인수**

* `input` — 소문자로 변환할 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

소문자 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**첫 번째**

```sql title=Query theme={null}
SELECT lowerUTF8('München') as Lowerutf8;
```

```response title=Response theme={null}
münchen
```

<div id="naturalSortKey">
  ## naturalSortKey
</div>

도입 버전: v26.3.0

이 함수는 자연 정렬에 사용되는 함수입니다.

**구문**

```sql theme={null}
naturalSortKey(s)
```

**별칭**: `NATURAL_SORT_KEY`

**인수**

* `s` — 자연 정렬 키 문자열로 변환할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`에서 생성된 자연 정렬 키 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT s FROM t ORDER BY naturalSortKey(s)
```

```response title=Response theme={null}
┌─s───┐
│ a1  │
| a02 │
└─────┘
```

<div id="normalizeUTF8NFC">
  ## normalizeUTF8NFC
</div>

도입 버전: v21.11.0

UTF-8 문자열을 [NFC 정규화 형식](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)에 따라 정규화합니다.

**구문**

```sql theme={null}
normalizeUTF8NFC(str)
```

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

UTF-8 문자열의 NFC 정규화된 형태를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
'é' AS original, -- e + 결합 악센트 부호 (U+0065 + U+0301)
length(original),
normalizeUTF8NFC('é') AS nfc_normalized, -- é (U+00E9)
length(nfc_normalized);
```

```response title=Response theme={null}
┌─original─┬─length(original)─┬─nfc_normalized─┬─length(nfc_normalized)─┐
│ é        │                2 │ é              │                      2 │
└──────────┴──────────────────┴────────────────┴────────────────────────┘
```

<div id="normalizeUTF8NFD">
  ## normalizeUTF8NFD
</div>

도입 버전: v21.11.0

UTF-8 문자열을 [NFD 정규화 형식](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)에 따라 정규화합니다.

**구문**

```sql theme={null}
normalizeUTF8NFD(str)
```

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

UTF-8 문자열의 NFD로 정규화된 형태를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
    'é' AS original, -- é (U+00E9)
    length(original),
    normalizeUTF8NFD('é') AS nfd_normalized, -- e + 결합 악센트 (U+0065 + U+0301)
    length(nfd_normalized);
```

```response title=Response theme={null}
┌─original─┬─length(original)─┬─nfd_normalized─┬─length(nfd_normalized)─┐
│ é        │                2 │ é              │                      3 │
└──────────┴──────────────────┴────────────────┴────────────────────────┘
```

<div id="normalizeUTF8NFKC">
  ## normalizeUTF8NFKC
</div>

도입 버전: v21.11.0

UTF-8 문자열을 [NFKC 정규화 형식](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)에 따라 정규화합니다.

**구문**

```sql theme={null}
normalizeUTF8NFKC(str)
```

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

UTF-8 문자열을 NFKC로 정규화한 값을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
    '① ② ③' AS original,                            -- 원형 숫자 문자
    normalizeUTF8NFKC('① ② ③') AS nfkc_normalized;  -- 1 2 3으로 변환
```

```response title=Response theme={null}
┌─original─┬─nfkc_normalized─┐
│ ① ② ③  │ 1 2 3           │
└──────────┴─────────────────┘
```

<div id="normalizeUTF8NFKCCasefold">
  ## normalizeUTF8NFKCCasefold
</div>

도입 버전: v26.3.0

[NFKC\_Casefold normalization form](https://unicode.org/reports/tr44/#NFKC_Casefold)에 따라 UTF-8 문자열을 정규화합니다. 이 정규화 형식은 먼저 NFKC 정규화를 적용한 뒤 case folding을 수행합니다.
식별자를 대소문자를 구분하지 않고 일치시킬 때 유용합니다.

**구문**

```sql theme={null}
normalizeUTF8NFKCCasefold(str)
```

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

UTF-8 문자열의 NFKC\_Casefold 정규화 형태를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
    'Ä ① Hello' AS original,
    normalizeUTF8NFKCCasefold('Ä ① Hello') AS nfkc_cf_normalized;
```

```response title=Response theme={null}
┌─original───┬─nfkc_cf_normalized─┐
│ Ä ① Hello │ ä 1 hello           │
└────────────┴────────────────────┘
```

<div id="normalizeUTF8NFKD">
  ## normalizeUTF8NFKD
</div>

도입 버전: v21.11.0

UTF-8 문자열을 [NFKD 정규화 형식](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)에 따라 정규화합니다.

**구문**

```sql theme={null}
normalizeUTF8NFKD(str)
```

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

UTF-8 문자열의 NFKD 정규화된 형식을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
    'H₂O²' AS original,                            -- H + 아래 첨자 2 + O + 위 첨자 2
    normalizeUTF8NFKD('H₂O²') AS nfkd_normalized;  -- H 2 O 2로 변환
```

```response title=Response theme={null}
┌─original─┬─nfkd_normalized─┐
│ H₂O²     │ H2O2            │
└──────────┴─────────────────┘
```

<div id="punycodeDecode">
  ## punycodeDecode
</div>

도입 버전: v24.1.0

[Punycode](https://en.wikipedia.org/wiki/Punycode)로 인코딩된 문자열의 UTF-8로 인코딩된 일반 텍스트를 반환합니다.
유효한 Punycode 인코딩 문자열이 주어지지 않으면 예외가 발생합니다.

**구문**

```sql theme={null}
punycodeDecode(s)
```

**인수**

* `s` — Punycode로 인코딩된 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력값의 평문을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT punycodeDecode('Mnchen-3ya')
```

```response title=Response theme={null}
┌─punycodeDecode('Mnchen-3ya')─┐
│ München                      │
└──────────────────────────────┘
```

<div id="punycodeEncode">
  ## punycodeEncode
</div>

도입 버전: v24.1.0

문자열의 [Punycode](https://en.wikipedia.org/wiki/Punycode) 표현을 반환합니다.
문자열은 UTF8로 인코딩되어 있어야 하며, 그렇지 않으면 동작이 정의되지 않습니다.

**구문**

```sql theme={null}
punycodeEncode(s)
```

**인수**

* `s` — 입력값. [`String`](/ko/reference/data-types/string)

**반환 값**

입력값의 Punycode 표현을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT punycodeEncode('München')
```

```response title=Response theme={null}
┌─punycodeEncode('München')─┐
│ Mnchen-3ya                │
└───────────────────────────┘
```

<div id="regexpExtract">
  ## regexpExtract
</div>

도입 버전: v23.2.0

regexp 패턴과 일치하고 정규식 그룹 인덱스에 해당하는 `haystack`의 첫 번째 문자열을 추출합니다.

**구문**

```sql theme={null}
regexpExtract(haystack, pattern[, index])
```

**별칭**: `REGEXP_EXTRACT`

**인수**

* `haystack` — 정규식 패턴을 일치시킬 String입니다. [`String`](/ko/reference/data-types/string)
* `pattern` — String, 정규식 표현식입니다. `pattern`에는 여러 개의 정규식 그룹이 포함될 수 있으며, `index`는 추출할 정규식 그룹을 나타냅니다. 인덱스가 0이면 정규식 전체와 일치하는 값을 의미합니다. [`const String`](/ko/reference/data-types/string)
* `index` — 선택 사항입니다. 기본값은 1이며 0 이상인 정수입니다. 추출할 정규식 그룹을 나타냅니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

일치한 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT
    regexpExtract('100-200', '(\\d+)-(\\d+)', 1),
    regexpExtract('100-200', '(\\d+)-(\\d+)', 2),
    regexpExtract('100-200', '(\\d+)-(\\d+)', 0),
    regexpExtract('100-200', '(\\d+)-(\\d+)');
```

```response title=Response theme={null}
┌─regexpExtract('100-200', '(\\d+)-(\\d+)', 1)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 2)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 0)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)')─┐
│ 100                                          │ 200                                          │ 100-200                                      │ 100                                       │
└──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────┘
```

<div id="regexpPosition">
  ## regexpPosition
</div>

도입 버전: v26.5.0

바이트 위치 `position`에서 검색을 시작해, `haystack`에서 `pattern`이 `occurrence`번째로 일치하는 바이트 위치(1부터 시작)를 반환합니다.

`return_option`이 0(기본값)이면 일치 항목의 첫 번째 바이트 위치를 반환합니다. 1이면 일치 항목 *직후* 첫 번째 바이트의 위치를 반환합니다.

`subexpression`이 0보다 크면 전체 일치 항목이 아니라 해당 캡처 그룹의 위치를 반환합니다.

일치 항목을 찾지 못했거나 요청한 캡처 그룹이 일치에 포함되지 않은 경우 0을 반환합니다.

PostgreSQL의 `regexp_instr`와의 호환성을 위해 제공되며(해당 alias로도 노출됨), 위치는 바이트 기준이라는 점에 유의하십시오. 이는 다른 ClickHouse 정규식 함수와 일관되며 PostgreSQL의 `regexp_instr`는 문자 기준입니다.

**구문**

```sql theme={null}
regexpPosition(haystack, pattern[, position[, occurrence[, return_option[, flags[, subexpression]]]]])
```

**별칭**: `regexpInstr`, `regexp_instr`

**인수**

* `haystack` — 검색할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `pattern` — 정규식 패턴입니다. [`const String`](/ko/reference/data-types/string)
* `position` — 선택 사항입니다. 검색을 시작할 1부터 시작하는 바이트 위치입니다. 기본값: 1. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `occurrence` — 선택 사항입니다. 반환할 일치 항목의 순서입니다. 기본값: 1. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `return_option` — 선택 사항입니다. 0은 일치 시작 위치를 반환하고, 1은 일치 바로 뒤의 위치를 반환합니다. 기본값: 0. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `flags` — 선택 사항입니다. 정규식 플래그입니다. 지원 항목: `i` (대소문자 구분 안 함), `c` (대소문자 구분), `m`/`n` (여러 줄 앵커), `s` (점이 줄바꿈과 일치). 기본값: 빈 문자열. [`const String`](/ko/reference/data-types/string)
* `subexpression` — 선택 사항입니다. 위치를 반환할 캡처 그룹의 인덱스입니다. 0은 전체 일치를 의미합니다. 기본값: 0. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

일치하는 항목의 바이트 위치를 반환하며, 찾지 못한 경우 0을 반환합니다. [`UInt64`](/ko/reference/data-types/int-uint)

**예시**

**기본 사용법**

```sql title=Query theme={null}
SELECT
    regexpPosition('hello world', 'world'),
    regexpPosition('aXbXcXd', 'X', 1, 2),
    regexpPosition('aXbXcXd', 'X', 1, 2, 1),
    regexpPosition('Hello WORLD', 'world', 1, 1, 0, 'i'),
    regexpPosition('foo123bar456', '([a-z]+)([0-9]+)', 1, 2, 0, '', 2);
```

```response title=Response theme={null}
┌─...─┬─...─┬─...─┬─...─┬─...─┐
│   7 │   4 │   5 │   7 │  10 │
└─────┴─────┴─────┴─────┴─────┘
```

<div id="removeDiacriticsUTF8">
  ## removeDiacriticsUTF8
</div>

도입 버전: v26.3.0

UTF-8 문자열의 문자를 NFD로 분해한 뒤,
결합 마크(유니코드 범주 Mn)를 제거하고 NFC로 다시 조합하여 발음 구별 기호(악센트)를 제거합니다.

**구문**

```sql theme={null}
removeDiacriticsUTF8(str)
```

**별칭**: `removeAccentsUTF8`

**인수**

* `str` — UTF-8로 인코딩된 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

발음 구별 부호가 제거된 UTF-8 문자열입니다. [`String`](/ko/reference/data-types/string)

**예시**

**기본 발음 구별 부호 제거**

```sql title=Query theme={null}
SELECT removeDiacriticsUTF8('café résumé naïve')
```

```response title=Response theme={null}
┌─removeDiacriticsUTF8('café résumé naïve')─┐
│ cafe resume naive                          │
└────────────────────────────────────────────┘
```

<div id="repeat">
  ## repeat
</div>

도입 버전: v20.1.0

문자열을 지정한 횟수만큼 반복하여 이어 붙입니다.

**구문**

```sql theme={null}
repeat(s, n)
```

**인수**

* `s` — 반복할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `n` — 문자열을 반복할 횟수입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

문자열 `s`를 `n`회 반복한 문자열입니다. `n`이 음수이면 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT repeat('abc', 10)
```

```response title=Response theme={null}
┌─repeat('abc', 10)──────────────┐
│ abcabcabcabcabcabcabcabcabcabc │
└────────────────────────────────┘
```

<div id="reverseUTF8">
  ## reverseUTF8
</div>

도입 버전: v1.1.0

문자열에서 유니코드 코드 포인트의 순서를 반대로 바꿉니다.
문자열에 유효한 UTF-8 인코딩 텍스트가 들어 있다고 가정합니다.
이 가정이 충족되지 않아도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
reverseUTF8(s)
```

**인수**

* `s` — 유효한 UTF-8 인코딩 텍스트를 포함하는 String입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

유니코드 코드 포인트 시퀀스를 역순으로 뒤집은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT reverseUTF8('ClickHouse')
```

```response title=Response theme={null}
esuoHkcilC
```

<div id="right">
  ## right
</div>

도입 버전: v22.1.0

문자열 `s`의 오른쪽부터 지정한 `offset` 위치에서 시작하는 부분 문자열을 반환합니다.

**구문**

```sql theme={null}
right(s, offset)
```

**인수**

* `s` — 부분 문자열을 추출할 문자열입니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)
* `offset` — 오프셋의 바이트 수입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

다음을 반환합니다:

* `offset`이 양수이면 문자열의 오른쪽에서 시작해 `offset`바이트 길이의 `s` 부분 문자열을 반환합니다.
* `offset`이 음수이면 문자열의 오른쪽에서 시작해 `length(s) - |offset|`바이트 길이의 `s` 부분 문자열을 반환합니다.
* `length`가 `0`이면 빈 문자열을 반환합니다.
  [`String`](/ko/reference/data-types/string)

**예시**

**양수 `offset`**

```sql title=Query theme={null}
SELECT right('Hello', 3)
```

```response title=Response theme={null}
llo
```

**음수 오프셋**

```sql title=Query theme={null}
SELECT right('Hello', -3)
```

```response title=Response theme={null}
lo
```

<div id="rightPad">
  ## rightPad
</div>

도입 버전: v21.8.0

결과 문자열의 길이가 지정된 `length`에 도달할 때까지 문자열 오른쪽을 공백 또는 지정된 문자열로(필요한 경우 여러 번) 채웁니다.

**구문**

```sql theme={null}
rightPad(string, length[, pad_string])
```

**별칭**: `rpad`

**인수**

* `string` — 패딩할 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `length` — 결과 문자열의 길이입니다. 값이 입력 문자열의 길이보다 작으면 입력 문자열은 `length`개의 문자로 잘립니다. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `pad_string` — 선택 사항입니다. 입력 문자열을 채우는 데 사용할 문자열입니다. 지정하지 않으면 입력 문자열은 공백으로 채워집니다. [`String`](/ko/reference/data-types/string)

**반환 값**

지정된 길이가 되도록 오른쪽이 채워진 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT rightPad('abc', 7, '*'), rightPad('abc', 7)
```

```response title=Response theme={null}
┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐
│ abc****                 │ abc                │
└─────────────────────────┴────────────────────┘
```

<div id="rightPadUTF8">
  ## rightPadUTF8
</div>

도입 버전: v21.8.0

결과 문자열이 지정된 길이에 도달할 때까지 문자열의 오른쪽을 공백이나 지정된 문자열로 채웁니다(필요한 경우 여러 번 반복).
문자열 길이를 바이트 단위로 측정하는 [`rightPad`](#rightPad)와 달리, 이 함수는 문자열 길이를 코드 포인트 단위로 측정합니다.

**구문**

```sql theme={null}
rightPadUTF8(string, length[, pad_string])
```

**인수**

* `string` — 패딩할 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `length` — 결과 문자열의 길이입니다. 값이 입력 문자열의 길이보다 작으면 입력 문자열은 `length`개의 문자로 잘립니다. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `pad_string` — 선택 사항입니다. 입력 문자열을 패딩할 때 사용할 문자열입니다. 지정하지 않으면 입력 문자열은 공백으로 패딩됩니다. [`String`](/ko/reference/data-types/string)

**반환 값**

지정된 길이가 되도록 오른쪽에 패딩된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7)
```

```response title=Response theme={null}
┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐
│ абвг***                      │ абвг                    │
└──────────────────────────────┴─────────────────────────┘
```

<div id="rightUTF8">
  ## rightUTF8
</div>

도입 버전: v22.1.0

UTF-8로 인코딩된 문자열 `s`의 오른쪽에서부터 지정한 `offset` 위치에서 시작하는 부분 문자열을 반환합니다.

**구문**

```sql theme={null}
rightUTF8(s, offset)
```

**인수**

* `s` — 부분 문자열을 추출할 UTF-8 인코딩 문자열입니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring)
* `offset` — 오프셋의 바이트 수입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

다음을 반환합니다.

* `offset`이 양수이면, 문자열의 오른쪽에서 시작해 `offset`바이트 길이의 `s` 부분 문자열을 반환합니다.
* `offset`이 음수이면, 문자열의 오른쪽에서 시작해 `length(s) - |offset|`바이트 길이의 `s` 부분 문자열을 반환합니다.
* `length`가 `0`이면 빈 문자열을 반환합니다.
  [`String`](/ko/reference/data-types/string)

**예시**

**양수 오프셋**

```sql title=Query theme={null}
SELECT rightUTF8('Привет', 4)
```

```response title=Response theme={null}
ивет
```

**음수 오프셋**

```sql title=Query theme={null}
SELECT rightUTF8('Привет', -4)
```

```response title=Response theme={null}
ет
```

<div id="soundex">
  ## soundex
</div>

도입 버전: v23.4.0

문자열의 [Soundex 코드](https://en.wikipedia.org/wiki/Soundex)를 반환합니다.

**구문**

```sql theme={null}
soundex(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 문자열의 Soundex 코드를 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT soundex('aksel')
```

```response title=Response theme={null}
┌─soundex('aksel')─┐
│ A240             │
└──────────────────┘
```

<div id="space">
  ## space
</div>

도입 버전: v23.5.0

공백(` `)을 지정한 횟수만큼 반복해 연결합니다.

**구문**

```sql theme={null}
space(n)
```

**인수**

* `n` — 공백을 반복할 횟수입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

공백이 `n`번 반복된 문자열을 반환합니다. `n <= 0`이면 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT space(3) AS res, length(res);
```

```response title=Response theme={null}
┌─res─┬─length(res)─┐
│     │           3 │
└─────┴─────────────┘
```

<div id="sparseGrams">
  ## sparseGrams
</div>

도입 버전: v25.5.0

주어진 문자열에서 길이가 최소 `n`인 모든 부분 문자열을 찾습니다.
이때 부분 문자열의 양쪽 경계에 있는 (n-1)-gram의 해시는
부분 문자열 내부의 어떤 (n-1)-gram의 해시보다도 반드시 커야 합니다.
해시 함수로 `CRC32`를 사용합니다.

**구문**

```sql theme={null}
sparseGrams(s[, min_ngram_length[, max_ngram_length[, min_cutoff_length]]])
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `min_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최소 길이입니다. 기본값이자 최소값은 3입니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `max_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최대 길이입니다. 기본값은 100입니다. `min_ngram_length`보다 작으면 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `min_cutoff_length` — 선택 사항입니다. 지정하면 길이가 `min_cutoff_length` 이상인 n-그램만 반환됩니다. 기본값은 `min_ngram_length`와 같습니다. `min_ngram_length`보다 작으면 안 되며 `max_ngram_length`보다 크면 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)

**반환 값**

선택된 부분 문자열의 배열을 반환합니다. [`Array(String)`](/ko/reference/data-types/array)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT sparseGrams('alice', 3)
```

```response title=Response theme={null}
┌─sparseGrams('alice', 3)────────────┐
│ ['ali','lic','lice','ice']         │
└────────────────────────────────────┘
```

<div id="sparseGramsHashes">
  ## sparseGramsHashes
</div>

도입 버전: v25.5.0

주어진 문자열에서 길이가 최소 `n`인 모든 부분 문자열의 해시를 찾습니다.
이때 부분 문자열 경계에 있는 (n-1)-gram의 해시는
부분 문자열 내부의 어떤 (n-1)-gram의 해시보다도 반드시 커야 합니다.
해시 함수로 `CRC32`를 사용합니다.

**구문**

```sql theme={null}
sparseGramsHashes(s[, min_ngram_length, max_ngram_length])
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `min_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최소 길이입니다. 기본값이자 최솟값은 3입니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `max_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최대 길이입니다. 기본값은 100입니다. `min_ngram_length`보다 작아서는 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `min_cutoff_length` — 선택 사항입니다. 지정하면 길이가 `min_cutoff_length` 이상인 n-그램만 반환됩니다. 기본값은 `min_ngram_length`와 같습니다. `min_ngram_length`보다 작아서는 안 되며 `max_ngram_length`보다 커서도 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)

**반환 값**

선택된 부분 문자열의 CRC32 해시로 구성된 배열을 반환합니다. [`Array(UInt32)`](/ko/reference/data-types/array)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT sparseGramsHashes('alice', 3)
```

```response title=Response theme={null}
┌─sparseGramsHashes('alice', 3)──────────────────────┐
│ [1481062250,2450405249,4012725991,1918774096]      │
└────────────────────────────────────────────────────┘
```

<div id="sparseGramsHashesUTF8">
  ## sparseGramsHashesUTF8
</div>

도입 버전: v25.5.0

주어진 UTF-8 문자열에서 길이가 최소 `n`인 모든 부분 문자열의 해시를 찾습니다. 이때 부분 문자열 경계에 있는 (n-1)-gram의 해시는 부분 문자열 내부의 어떤 (n-1)-gram의 해시보다도 반드시 커야 합니다.
UTF-8 문자열을 입력으로 받으며, UTF-8 시퀀스가 올바르지 않으면 예외를 발생시킵니다.
해시 함수로 `CRC32`를 사용합니다.

**구문**

```sql theme={null}
sparseGramsHashesUTF8(s[, min_ngram_length, max_ngram_length])
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `min_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최소 길이입니다. 기본값이자 최소값은 3입니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `max_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최대 길이입니다. 기본값은 100입니다. `min_ngram_length`보다 작아서는 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `min_cutoff_length` — 선택 사항입니다. 지정하면 길이가 `min_cutoff_length` 이상인 n-그램만 반환됩니다. 기본값은 `min_ngram_length`와 같습니다. `min_ngram_length`보다 작아서는 안 되며 `max_ngram_length`보다 커서도 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)

**반환 값**

선택된 UTF-8 부분 문자열의 CRC32 해시로 이루어진 배열을 반환합니다. [`Array(UInt32)`](/ko/reference/data-types/array)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT sparseGramsHashesUTF8('алиса', 3)
```

```response title=Response theme={null}
┌─sparseGramsHashesUTF8('алиса', 3)─┐
│ [4178533925,3855635300,561830861] │
└───────────────────────────────────┘
```

<div id="sparseGramsUTF8">
  ## sparseGramsUTF8
</div>

도입 버전: v25.5.0

지정된 UTF-8 문자열에서 길이가 최소 `n`인 모든 부분 문자열을 찾습니다. 이때 부분 문자열의 경계에 있는 (n-1)-gram의 해시 값은 부분 문자열 내부의 어떤 (n-1)-gram의 해시보다 반드시 커야 합니다.
입력으로 UTF-8 문자열을 받으며, UTF-8 시퀀스가 잘못된 경우 예외를 발생시킵니다.
해시 함수로 `CRC32`를 사용합니다.

**구문**

```sql theme={null}
sparseGramsUTF8(s[, min_ngram_length[, max_ngram_length[, min_cutoff_length]]])
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `min_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최소 길이입니다. 기본값이자 최소값은 3입니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `max_ngram_length` — 선택 사항입니다. 추출할 n-그램의 최대 길이입니다. 기본값은 100입니다. `min_ngram_length`보다 작아서는 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)
* `min_cutoff_length` — 선택 사항입니다. 지정하면 길이가 `min_cutoff_length` 이상인 n-그램만 반환됩니다. 기본값은 `min_ngram_length`와 같습니다. `min_ngram_length`보다 작아서는 안 되며 `max_ngram_length`보다 커서도 안 됩니다. [`UInt*`](/ko/reference/data-types/int-uint)

**반환 값**

선택된 UTF-8 부분 문자열의 배열을 반환합니다. [`Array(String)`](/ko/reference/data-types/array)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT sparseGramsUTF8('алиса', 3)
```

```response title=Response theme={null}
┌─sparseGramsUTF8('алиса', 3)─┐
│ ['али','лис','иса']         │
└─────────────────────────────┘
```

<div id="startsWith">
  ## startsWith
</div>

도입 버전: v1.1.0

문자열이 지정된 문자열로 시작하는지 확인합니다.

**구문**

```sql theme={null}
startsWith(s, prefix)
```

**인수**

* `s` — 확인할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `prefix` — 확인할 접두사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 `prefix`로 시작하면 `1`을, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT startsWith('ClickHouse', 'Click');
```

```response title=Response theme={null}
┌─startsWith('⋯', 'Click')─┐
│                        1 │
└──────────────────────────┘
```

<div id="startsWithCaseInsensitive">
  ## startsWithCaseInsensitive
</div>

도입 버전: v25.10.0

문자열이 지정된 문자열로 시작하는지 여부를 대소문자를 구분하지 않고 확인합니다.

**구문**

```sql theme={null}
startsWithCaseInsensitive(s, prefix)
```

**인수**

* `s` — 확인할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `prefix` — 확인할 대소문자를 구분하지 않는 접두사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 대소문자를 구분하지 않는 `prefix`로 시작하면 `1`을 반환하고, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT startsWithCaseInsensitive('ClickHouse', 'CLICK');
```

```response title=Response theme={null}
┌─startsWithCaseInsensitive('⋯', 'CLICK')─┐
│                                       1 │
└─────────────────────────────────────────┘
```

<div id="startsWithCaseInsensitiveUTF8">
  ## startsWithCaseInsensitiveUTF8
</div>

도입 버전: v25.10.0

문자열이 지정된 대소문자를 구분하지 않는 접두사로 시작하는지 확인합니다.
문자열에 유효한 UTF-8 인코딩 텍스트가 포함되어 있다고 가정합니다.
이 가정이 충족되지 않아도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
startsWithCaseInsensitiveUTF8(s, prefix)
```

**인수**

* `s` — 확인할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `prefix` — 대소문자를 구분하지 않는 확인할 접두사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 대소문자를 구분하지 않는 `prefix`로 시작하면 `1`을 반환하고, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT startsWithCaseInsensitiveUTF8('приставка', 'при')
```

```response title=Response theme={null}
┌─startsWithUT⋯ка', 'при')─┐
│                        1 │
└──────────────────────────┘
```

<div id="startsWithUTF8">
  ## startsWithUTF8
</div>

도입 버전: v23.8.0

문자열이 지정된 prefix로 시작하는지 확인합니다.
문자열이 유효한 UTF-8로 인코딩된 텍스트를 포함한다고 가정합니다.
이 가정이 충족되지 않아도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
startsWithUTF8(s, prefix)
```

**인수**

* `s` — 확인할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `prefix` — 확인할 접두사입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`가 `prefix`로 시작하면 `1`을, 그렇지 않으면 `0`을 반환합니다. [`UInt8`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT startsWithUTF8('приставка', 'при')
```

```response title=Response theme={null}
┌─startsWithUT⋯ка', 'при')─┐
│                        1 │
└──────────────────────────┘
```

<div id="stringBytesEntropy">
  ## stringBytesEntropy
</div>

도입 버전: v25.6.0

문자열의 바이트 분포에 대한 샤논 엔트로피를 계산합니다.

**구문**

```sql theme={null}
stringBytesEntropy(s)
```

**인수**

* `s` — 분석할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열 내 바이트 분포의 샤논 엔트로피를 반환합니다. [`Float64`](/ko/reference/data-types/float)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT stringBytesEntropy('Hello, world!')
```

```response title=Response theme={null}
┌─stringBytesEntropy('Hello, world!')─┐
│                         3.07049960  │
└─────────────────────────────────────┘
```

<div id="stringBytesUniq">
  ## stringBytesUniq
</div>

도입 버전: v25.6.0

문자열에 포함된 고유 바이트 수를 계산합니다.

**구문**

```sql theme={null}
stringBytesUniq(s)
```

**인수**

* `s` — 분석할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

문자열에서 서로 다른 바이트의 개수를 반환합니다. [`UInt16`](/ko/reference/data-types/int-uint)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT stringBytesUniq('Hello')
```

```response title=Response theme={null}
┌─stringBytesUniq('Hello')─┐
│                        4 │
└──────────────────────────┘
```

<div id="stringJaccardIndex">
  ## stringJaccardIndex
</div>

도입 버전: v23.11.0

두 바이트 문자열 사이의 [자카드 유사도 지수](https://en.wikipedia.org/wiki/Jaccard_index)를 계산합니다.

**구문**

```sql theme={null}
stringJaccardIndex(s1, s2)
```

**인수**

* `s1` — 첫 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 문자열 사이의 Jaccard 유사도 지수를 반환합니다. [`Float64`](/ko/reference/data-types/float)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT stringJaccardIndex('clickhouse', 'mouse')
```

```response title=Response theme={null}
┌─stringJaccardIndex('clickhouse', 'mouse')─┐
│                                       0.4 │
└───────────────────────────────────────────┘
```

<div id="stringJaccardIndexUTF8">
  ## stringJaccardIndexUTF8
</div>

도입 버전: v23.11.0

UTF8로 인코딩된 문자열용 [`stringJaccardIndex`](#stringJaccardIndex)입니다.

**구문**

```sql theme={null}
stringJaccardIndexUTF8(s1, s2)
```

**인수**

* `s1` — 첫 번째 UTF8 입력 문자열입니다. [`String`](/ko/reference/data-types/string)
* `s2` — 두 번째 UTF8 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

두 UTF8 문자열 사이의 자카드 유사도 지수를 반환합니다. [`Float64`](/ko/reference/data-types/float)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT stringJaccardIndexUTF8('我爱你', '我也爱你')
```

```response title=Response theme={null}
┌─stringJaccardIndexUTF8('我爱你', '我也爱你')─┐
│                                       0.75 │
└─────────────────────────────────────────────┘
```

<div id="substring">
  ## substring
</div>

도입 버전: v1.1.0

지정된 바이트 인덱스 `offset`에서 시작하는 문자열 `s`의 부분 문자열을 반환합니다.
바이트 수는 다음 규칙에 따라 1부터 계산됩니다.

* `offset`이 `0`이면 빈 문자열이 반환됩니다.
* `offset`이 음수이면 부분 문자열은 문자열의 시작이 아니라 끝에서 `offset` 문자만큼 떨어진 위치에서 시작합니다.

선택적 인수 `length`는 반환되는 부분 문자열이 가질 수 있는 최대 바이트 수를 지정합니다.

**구문**

```sql theme={null}
substring(s, offset[, length])
```

**별칭**: `byteSlice`, `mid`, `substr`

**인수**

* `s` — 부분 문자열을 추출할 문자열입니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring) 또는 [`Enum`](/ko/reference/data-types/enum)
* `offset` — `s`에서 부분 문자열이 시작되는 위치입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)
* `length` — 선택 사항입니다. 부분 문자열의 최대 길이입니다. [`(U)Int*`](/ko/reference/data-types/int-uint)

**반환 값**

인덱스 `offset`에서 시작하는 `s`의 부분 문자열을 `length`바이트 길이로 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**기본 사용법**

```sql title=Query theme={null}
SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1)
```

```response title=Response theme={null}
┌─db───────┬─substring('database', 5)─┬─substring('database', 5, 1)─┐
│ database │ base                     │ b                           │
└──────────┴──────────────────────────┴─────────────────────────────┘
```

<div id="substringIndex">
  ## substringIndex
</div>

도입 버전: v23.7.0

Spark 또는 MySQL과 마찬가지로, 구분자 `delim`이 `count`번 나타나기 전까지의 `s` 부분 문자열을 반환합니다.

**구문**

```sql theme={null}
substringIndex(s, delim, count)
```

**별칭**: `SUBSTRING_INDEX`

**인수**

* `s` — 부분 문자열을 추출할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `delim` — 분리 기준이 되는 문자입니다. [`String`](/ko/reference/data-types/string)
* `count` — 부분 문자열을 추출하기 전에 셀 구분자의 출현 횟수입니다. count가 양수이면 마지막 구분자의 왼쪽에 있는 모든 내용(왼쪽부터 셈)이 반환됩니다. count가 음수이면 마지막 구분자의 오른쪽에 있는 모든 내용(오른쪽부터 셈)이 반환됩니다. [`UInt`](/ko/reference/data-types/int-uint) 또는 [`Int`](/ko/reference/data-types/int-uint)

**반환 값**

`s`에서 `delim`이 `count`번 나타나기 전까지의 부분 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT substringIndex('www.clickhouse.com', '.', 2)
```

```response title=Response theme={null}
┌─substringIndex('www.clickhouse.com', '.', 2)─┐
│ www.clickhouse                               │
└──────────────────────────────────────────────┘
```

<div id="substringIndexUTF8">
  ## substringIndexUTF8
</div>

도입 버전: v23.7.0

유니코드 코드 포인트를 기준으로, `delim` 구분자가 `count`번 나타나기 전까지의 `s` 부분 문자열을 반환합니다.
문자열에 유효한 UTF-8로 인코딩된 텍스트가 들어 있다고 가정합니다.
이 가정이 깨져도 예외는 발생하지 않으며 결과는 정의되지 않습니다.

**구문**

```sql theme={null}
substringIndexUTF8(s, delim, count)
```

**인수**

* `s` — 부분 문자열을 추출할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `delim` — 분리 기준이 되는 문자입니다. [`String`](/ko/reference/data-types/string)
* `count` — 부분 문자열을 추출하기 전에 셀 구분자의 출현 횟수입니다. `count`가 양수이면 마지막 구분자(왼쪽부터 계산)의 왼쪽에 있는 모든 내용이 반환됩니다. `count`가 음수이면 마지막 구분자(오른쪽부터 계산)의 오른쪽에 있는 모든 내용이 반환됩니다. [`UInt`](/ko/reference/data-types/int-uint) 또는 [`Int`](/ko/reference/data-types/int-uint)

**반환 값**

`s`에서 `delim`이 `count`번 나타나기 전까지의 부분 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**UTF8 예시**

```sql title=Query theme={null}
SELECT substringIndexUTF8('www.straßen-in-europa.de', '.', 2)
```

```response title=Response theme={null}
www.straßen-in-europa
```

<div id="substringUTF8">
  ## substringUTF8
</div>

도입 버전: v1.1.0

지정된 코드 포인트 인덱스 `offset`에서 시작하는 문자열 `s`의 부분 문자열을 반환합니다.
코드 포인트는 다음 규칙에 따라 `1`부터 계산합니다.

* `offset`이 `0`이면 빈 문자열을 반환합니다.
* `offset`이 음수이면 부분 문자열은 문자열의 시작이 아니라 끝에서부터 `offset` 코드 포인트 떨어진 위치에서 시작합니다.

선택적 인수 `length`는 반환되는 부분 문자열의 최대 코드 포인트 수를 지정합니다.

<Note>
  이 함수는 문자열에 유효한 UTF-8로 인코딩된 텍스트가 들어 있다고 가정합니다.
  이 가정이 충족되지 않아도 예외가 발생하지 않으며 결과는 정의되지 않습니다.
</Note>

**구문**

```sql theme={null}
substringUTF8(s, offset[, length])
```

**인수**

* `s` — 부분 문자열을 추출할 문자열입니다. [`String`](/ko/reference/data-types/string) 또는 [`FixedString`](/ko/reference/data-types/fixedstring) 또는 [`Enum`](/ko/reference/data-types/enum)
* `offset` — `s`에서 부분 문자열이 시작되는 위치입니다. [`Int`](/ko/reference/data-types/int-uint) 또는 [`UInt`](/ko/reference/data-types/int-uint)
* `length` — 부분 문자열의 최대 길이입니다. 선택 사항입니다. [`Int`](/ko/reference/data-types/int-uint) 또는 [`UInt`](/ko/reference/data-types/int-uint)

**반환 값**

코드 포인트 인덱스 `offset`에서 시작하는, `length`개의 코드 포인트 길이를 갖는 `s`의 부분 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT 'Täglich grüßt das Murmeltier.' AS str, substringUTF8(str, 9), substringUTF8(str, 9, 5)
```

```response title=Response theme={null}
Täglich grüßt das Murmeltier.    grüßt das Murmeltier.    grüßt
```

<div id="toValidUTF8">
  ## toValidUTF8
</div>

도입 버전: v20.1.0

유효하지 않은 UTF-8 문자를 대체 문자 `�`(U+FFFD)로 바꾸어 문자열을 올바른 UTF-8 인코딩으로 변환합니다.
유효하지 않은 문자가 여러 개 연속으로 발견되면 하나의 대체 문자로 합쳐집니다.

**구문**

```sql theme={null}
toValidUTF8(s)
```

**인수**

* `s` — String 데이터 타입 객체로 표현된 임의의 바이트 시퀀스입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

유효한 UTF-8 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT toValidUTF8('\\x61\\xF0\\x80\\x80\\x80b')
```

```response title=Response theme={null}
c
┌─toValidUTF8('a����b')─┐
│ a�b                   │
└───────────────────────┘
```

<div id="trimBoth">
  ## trimBoth
</div>

도입 버전: v20.1.0

문자열의 앞부분과 뒷부분에서 지정된 문자를 제거합니다.
기본적으로 일반적인 공백(ASCII) 문자를 제거합니다.

**구문**

```sql theme={null}
trimBoth(s[, trim_characters])
```

**별칭**: `trim`

**인수**

* `s` — 양끝 문자를 제거할 String입니다. [`String`](/ko/reference/data-types/string)
* `trim_characters` — 선택 사항입니다. 제거할 문자입니다. 지정하지 않으면 일반적인 공백 문자가 제거됩니다. [`String`](/ko/reference/data-types/string)

**반환 값**

양쪽 끝에서 지정된 문자가 제거된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT trimBoth('$$ClickHouse$$', '$')
```

```response title=Response theme={null}
┌─trimBoth('$$⋯se$$', '$')─┐
│ ClickHouse               │
└──────────────────────────┘
```

<div id="trimLeft">
  ## trimLeft
</div>

도입 버전: v20.1.0

문자열의 시작 부분에서 지정된 문자를 제거합니다.
기본적으로는 일반적인 공백(ASCII) 문자를 제거합니다.

**구문**

```sql theme={null}
trimLeft(input[, trim_characters])
```

**별칭**: `ltrim`

**인수**

* `input` — 트리밍할 문자열입니다. [`String`](/ko/reference/data-types/string)
* `trim_characters` — 선택 사항입니다. 트리밍할 문자입니다. 지정하지 않으면 일반적인 공백 문자가 제거됩니다. [`String`](/ko/reference/data-types/string)

**반환 값**

왼쪽에서 지정된 문자가 제거된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT trimLeft('ClickHouse', 'Click');
```

```response title=Response theme={null}
┌─trimLeft('Cl⋯', 'Click')─┐
│ House                    │
└──────────────────────────┘
```

<div id="trimRight">
  ## trimRight
</div>

도입 버전: v20.1.0

문자열의 끝에서 지정된 문자를 제거합니다.
기본적으로 일반적인 ASCII 공백 문자를 제거합니다.

**구문**

```sql theme={null}
trimRight(s[, trim_characters])
```

**별칭**: `rtrim`

**인수**

* `s` — 잘라낼 문자열입니다. [`String`](/ko/reference/data-types/string)
* `trim_characters` — 선택적으로 잘라낼 문자입니다. 지정하지 않으면 일반적인 공백 문자가 제거됩니다. [`String`](/ko/reference/data-types/string)

**반환 값**

오른쪽 끝에서 지정된 문자가 제거된 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT trimRight('ClickHouse','House');
```

```response title=Response theme={null}
┌─trimRight('C⋯', 'House')─┐
│ Click                    │
└──────────────────────────┘
```

<div id="tryBase32Decode">
  ## tryBase32Decode
</div>

도입 버전: v25.6.0

문자열을 받아 [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) 인코딩 방식으로 디코딩합니다.

**구문**

```sql theme={null}
tryBase32Decode(encoded)
```

**인수**

* `encoded` — 디코드할 String 컬럼 또는 상수입니다. 문자열이 유효한 Base32 인코딩이 아니면 오류 발생 시 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수의 디코드된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT tryBase32Decode('IVXGG33EMVSA====');
```

```response title=Response theme={null}
┌─tryBase32Decode('IVXGG33EMVSA====')─┐
│ Encoded                             │
└─────────────────────────────────────┘
```

<div id="tryBase58Decode">
  ## tryBase58Decode
</div>

도입 버전: v22.10.0

[`base58Decode`](#base58Decode)와 유사하지만, 오류가 발생하면 빈 문자열을 반환합니다.

**구문**

```sql theme={null}
tryBase58Decode(encoded[, expected_size])
```

**인수**

* `encoded` — `String` 컬럼 또는 상수입니다. 문자열이 유효한 Base58 인코딩이 아니면, 오류 발생 시 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)
* `expected_size` — 선택 사항입니다. 바이트 단위의 예상 디코딩 크기입니다. 32 또는 64이면 최적화된 디코더를 사용하고, 그 밖의 값이면 일반 디코더를 사용합니다. [`UInt8, UInt16, UInt32, or UInt64`](/ko/reference/data-types/int-uint)

**반환 값**

인수의 디코딩된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT tryBase58Decode('3dc8KtHrwM') AS res, tryBase58Decode('invalid') AS res_invalid;
```

```response title=Response theme={null}
┌─res─────┬─res_invalid─┐
│ Encoded │             │
└─────────┴─────────────┘
```

<div id="tryBase64Decode">
  ## tryBase64Decode
</div>

도입 버전: v18.16.0

[`base64Decode`](#base64Decode)와 유사하지만, 오류가 발생한 경우 빈 문자열을 반환합니다.

**구문**

```sql theme={null}
tryBase64Decode(encoded)
```

**인수**

* `encoded` — 디코딩할 String 컬럼 또는 상수입니다. 문자열이 유효한 Base64 인코딩이 아니면 오류 발생 시 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수에서 디코딩된 값을 포함하는 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT tryBase64Decode('Y2xpY2tob3VzZQ==')
```

```response title=Response theme={null}
┌─tryBase64Decode('Y2xpY2tob3VzZQ==')─┐
│ clickhouse                          │
└─────────────────────────────────────┘
```

<div id="tryBase64URLDecode">
  ## tryBase64URLDecode
</div>

도입 버전: v18.16.0

[`base64URLDecode`](#base64URLDecode)와 동일하지만, 오류가 발생한 경우에는 빈 문자열을 반환합니다.

**구문**

```sql theme={null}
tryBase64URLDecode(encoded)
```

**인수**

* `encoded` — 디코딩할 String 타입의 컬럼 또는 상수입니다. 문자열이 유효한 Base64 인코딩이 아니면 오류 발생 시 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**반환 값**

인수에서 디코딩된 값을 담은 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')
```

```response title=Response theme={null}
┌─tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐
│ https://clickhouse.com                               │
└──────────────────────────────────────────────────────┘
```

<div id="tryIdnaEncode">
  ## tryIdnaEncode
</div>

도입 버전: v24.1.0

[Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications) (IDNA) 메커니즘에 따라 도메인 이름의 유니코드(UTF-8) 표현인 ToUnicode 알고리즘 결과를 반환합니다.
오류가 발생하면 예외를 발생시키는 대신 빈 문자열을 반환합니다.

**구문**

```sql theme={null}
tryIdnaEncode(s)
```

**인수**

* `s` — 입력 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 값의 IDNA 메커니즘에 따라 입력 문자열을 ASCII로 표현한 값을 반환합니다. 입력이 올바르지 않으면 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT tryIdnaEncode('straße.münchen.de')
```

```response title=Response theme={null}
┌─tryIdnaEncode('straße.münchen.de')──┐
│ xn--strae-oqa.xn--mnchen-3ya.de     │
└─────────────────────────────────────┘
```

<div id="tryPunycodeDecode">
  ## tryPunycodeDecode
</div>

도입 버전: v24.1.0

`punycodeDecode`와 유사하지만, 유효한 Punycode 인코딩 문자열이 제공되지 않으면 빈 문자열을 반환합니다.

**구문**

```sql theme={null}
tryPunycodeDecode(s)
```

**인수**

* `s` — Punycode로 인코딩된 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

입력 값의 평문을 반환하며, 입력이 유효하지 않으면 빈 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT tryPunycodeDecode('Mnchen-3ya')
```

```response title=Response theme={null}
┌─tryPunycodeDecode('Mnchen-3ya')─┐
│ München                         │
└─────────────────────────────────┘
```

<div id="upper">
  ## upper
</div>

도입 버전: v1.1.0

문자열에 포함된 ASCII 라틴 문자를 대문자로 변환합니다.

**구문**

```sql theme={null}
upper(s)
```

**별칭**: `ucase`

**인수**

* `s` — 대문자로 변환할 문자열입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

`s`를 모두 대문자로 변환한 문자열을 반환합니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT upper('clickhouse')
```

```response title=Response theme={null}
┌─upper('clickhouse')─┐
│ CLICKHOUSE          │
└─────────────────────┘
```

<div id="upperUTF8">
  ## upperUTF8
</div>

도입 버전: v1.1.0

문자열이 유효한 UTF-8로 인코딩된 텍스트를 포함한다고 가정하고 문자열을 대문자로 변환합니다.
이 가정이 성립하지 않아도 예외는 발생하지 않으며, 결과는 정의되지 않습니다.

<Note>
  이 함수는 언어를 감지하지 않습니다. 예를 들어 터키어에서는 결과가 정확히 올바르지 않을 수 있습니다(i/İ 대 i/I).
  코드 포인트의 대문자와 소문자에서 UTF-8 바이트 시퀀스의 길이가 다른 경우(`ẞ` 및 `ß` 등), 해당 코드 포인트에 대한 결과가 올바르지 않을 수 있습니다.
</Note>

**구문**

```sql theme={null}
upperUTF8(s)
```

**인수**

* `s` — 문자열 타입입니다. [`String`](/ko/reference/data-types/string)

**반환 값**

String 데이터 타입의 값입니다. [`String`](/ko/reference/data-types/string)

**예시**

**사용 예시**

```sql title=Query theme={null}
SELECT upperUTF8('München') AS Upperutf8
```

```response title=Response theme={null}
┌─Upperutf8─┐
│ MÜNCHEN   │
└───────────┘
```
