> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.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>;

文字列の[検索](/ja/reference/functions/regular-functions/string-search-functions)および文字列の[置換](/ja/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`](/ja/reference/data-types/string)

**戻り値**

文字列の CRC32 チェックサムを返します。[`UInt32`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

文字列の CRC32 チェックサムを返します。[`UInt32`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

文字列の CRC64 チェックサムを返します。[`UInt64`](/ja/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`](/ja/reference/data-types/string)
* `c` — `s` の末尾になければ追加する文字。[`String`](/ja/reference/data-types/string)

**戻り値**

`s` が `c` で終わっていない場合、文字 `c` を末尾に追加した文字列 `s` を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

最初の文字の ASCII コードポイントを返します。`s` が空の場合、結果は `0` です。最初の文字が ASCII 文字でない場合、または UTF-16 の Latin-1 Supplement 範囲に含まれない場合、結果は未定義です。[`Int32`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をデコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をエンコードした値を含む文字列を返します。[`String`](/ja/reference/data-types/string) または [`FixedString`](/ja/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 エンコードでない場合は、例外が発生します。
最適化された固定サイズのデコーダーを選択するために、省略可能な第2引数 `expected_size` を指定できます。
現在サポートされている値は 32 と 64 です。それ以外の値では、汎用デコーダーが使用されます。
最適化デコーダーが選択されていても、入力をそのバイト数ちょうどにデコードできない場合、
関数は例外を発生させます (`tryBase58Decode` の場合は空文字列を返します) 。

**構文**

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

**引数**

* `encoded` — デコード対象の `String` カラムまたは定数。[`String`](/ja/reference/data-types/string)
* `expected_size` — 省略可。デコード後の想定サイズ (バイト単位) 。32 または 64 の場合は最適化されたデコーダーが使用され、それ以外の値では汎用デコーダーが使用されます。[`UInt8, UInt16, UInt32, or UInt64`](/ja/reference/data-types/int-uint)

**戻り値**

引数をデコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をエンコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

デコードされた文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をエンコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をデコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をエンコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

入力文字列のうち、最後のスラッシュまたはバックスラッシュより後ろの部分を返します。入力文字列がスラッシュまたはバックスラッシュで終わる場合、この関数は空文字列を返します。スラッシュまたはバックスラッシュが含まれていない場合は、元の文字列を返します。 [`String`](/ja/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                                   │
└────────────────────────┴────────────────────────────────────────┘
```

**パス区切り文字のない文字列**

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

2つのバイト文字列間の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)を計算します。

**構文**

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

**別名**: `mismatches`

**引数**

* `s1` — 1 つ目の入力文字列。[`String`](/ja/reference/data-types/string)
* `s2` — 2 つ目の入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

2 つの文字列のハミング距離を返します。[`UInt64`](/ja/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文字列に Unicode のケースフォールディングを適用し、大文字と小文字を区別しない比較に適した、小文字化に近い正規化済みの形式に変換します。

標準の Unicode ケースフォールディングを適用します。ケースフォールディングの影響を受けない互換文字
(例: ローマ数字、丸付き数字) は保持されますが、`ﬃ` のような一部の合字は、Unicode のケースフォールディング自体によって展開されるため、引き続き分解される点に注意してください。

**構文**

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

**引数**

* `str` — UTF-8 でエンコードされた入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

ケースフォールディングされた UTF-8 文字列。[`String`](/ja/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

2つの文字列を辞書式順序で比較します。

**構文**

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

**引数**

* `s1` — 比較対象の1つ目の文字列です。[`String`](/ja/reference/data-types/string)
* `s2` — 比較対象の2つ目の文字列です。[`String`](/ja/reference/data-types/string)
* `s1_offset` — 比較を開始する `s1` 内の位置 (0から始まる) です。[`UInt*`](/ja/reference/data-types/int-uint)
* `s2_offset` — 比較を開始する `s2` 内の位置 (0から始まるインデックス) です。[`UInt*`](/ja/reference/data-types/int-uint)
* `num_bytes` — 両方の文字列で比較する最大バイト数です。`s1_offset` (または `s2_offset`) + `num_bytes` が入力文字列の末尾を超える場合、`num_bytes` はそれに応じて短くなります。[`UInt*`](/ja/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`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring) 型以外の引数は、デフォルトのシリアライゼーションを使用して文字列に変換されます。
ただし、これによりパフォーマンスが低下するため、String/FixedString 以外の引数の使用は推奨されません。

**構文**

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

**引数**

* `s1, s2, ...` — 任意の型の値を任意の数だけ指定できます。[`Any`](/ja/reference/data-types)

**戻り値**

引数を連結して生成された文字列を返します。引数のいずれかが `NULL` の場合、この関数は `NULL` を返します。引数がない場合は、空文字列を返します。[`Nullable(String)`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring)

**戻り値**

引数を連結して作成された文字列を返します。いずれかの引数の値が `NULL` の場合、この関数は `NULL` を返します。引数が渡されない場合は、空文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string) または [`const FixedString`](/ja/reference/data-types/fixedstring)
* `exp1, exp2, ...` — 連結する式。型が `String` または `FixedString` ではない引数は、デフォルトのシリアライゼーションを使用して文字列に変換されます。パフォーマンスが低下するため、String/FixedString 以外の引数の使用は推奨されません。[`Any`](/ja/reference/data-types)

**戻り値**

引数を連結して作成した String を返します。引数の値のいずれかが `NULL` の場合、この関数は `NULL` を返します。[`String`](/ja/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`](/ja/reference/data-types/string) または [`const FixedString`](/ja/reference/data-types/fixedstring)
* `exp1, exp2, ...` — 連結する式。型が `String` または `FixedString` ではない引数は、デフォルトのシリアライゼーションを使用して文字列に変換されます。これはパフォーマンス低下につながるため、`String`/`FixedString` 以外の引数の使用は推奨されません。[`String`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring)

**戻り値**

引数を連結して作成された `String` を返します。いずれかの引数の値が `NULL` の場合、この関数は `NULL` を返します。[`String`](/ja/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 を超える基数では、10～35 の値を表すために文字 A-Z (大文字と小文字は区別されません) が使用されます。

この関数は 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
```

**2進数を8進数に変換する**

```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`](/ja/reference/data-types/string)
* `from` — 変換元の文字エンコーディング。[`String`](/ja/reference/data-types/string)
* `to` — 変換先の文字エンコーディング。[`String`](/ja/reference/data-types/string)

**戻り値**

エンコーディング `from` から `to` に変換された文字列 `s` を返します。[`String`](/ja/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

2 つのバイト文字列間の [ダメラウ・レーベンシュタイン距離](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance) を計算します。

**構文**

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

**引数**

* `s1` — 1 つ目の入力文字列。 [`String`](/ja/reference/data-types/string)
* `s2` — 2 つ目の入力文字列。 [`String`](/ja/reference/data-types/string)

**戻り値**

2 つの文字列間のダメラウ・レーベンシュタイン距離を返します。 [`UInt64`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

HTML エンティティをデコードした文字列を返します。[`String`](/ja/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>

導入バージョン: v21.2.0

文字列内の XML エンティティを対応する文字にデコードします。

**構文**

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

**引数**

* `s` — デコード対象の XML エンティティを含む文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

指定された文字列内の XML エンティティをデコードした結果を返します。[`String`](/ja/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

2つのバイト文字列間の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)を計算します。

**構文**

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

**別名**: `levenshteinDistance`

**引数**

* `s1` — 1つ目の入力文字列。[`String`](/ja/reference/data-types/string)
* `s2` — 2つ目の入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

2つの文字列間の編集距離を返します。[`UInt64`](/ja/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

2つの UTF-8 文字列間の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)を計算します。

**構文**

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

**別名**: `levenshteinDistanceUTF8`

**引数**

* `s1` — 1 番目の入力文字列。[`String`](/ja/reference/data-types/string)
* `s2` — 2 番目の入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

2 つの UTF-8 文字列間の編集距離を返します。[`UInt64`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

エスケープされた文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)
* `suffix` — 確認対象の接尾辞。 [`String`](/ja/reference/data-types/string)

**戻り値**

`s` が `suffix` で終わる場合は `1`、それ以外の場合は `0` を返します。 [`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `suffix` — チェックする大文字・小文字を区別しない接尾辞。 [`String`](/ja/reference/data-types/string)

**戻り値**

`s` が大文字・小文字を区別しない `suffix` で終わる場合は `1`、それ以外の場合は `0` を返します。 [`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `suffix` — 判定する大文字・小文字を区別しない接尾辞。[`String`](/ja/reference/data-types/string)

**戻り値**

`s` が大文字・小文字を区別しない `suffix` で終わる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `suffix` — 判定対象の接尾辞。[`String`](/ja/reference/data-types/string)

**戻り値**

`s` が `suffix` で終わる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

空白を正規化した抽出済みのテキストコンテンツを返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

入力文字列の最初の行を返します。行区切り文字がない場合は、文字列全体を返します。[`String`](/ja/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) に従い、ドメイン名の Unicode (UTF-8) 表現 (ToUnicode アルゴリズム) を返します。
エラーが発生した場合 (たとえば入力が無効な場合) は、入力文字列をそのまま返します。
大文字・小文字の正規化が行われるため、[`idnaEncode()`](#idnaEncode) と [`idnaDecode()`](#idnaDecode) を繰り返し適用しても、必ずしも元の文字列に戻るとは限りません。

**構文**

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

**引数**

* `s` — 入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

入力値の IDNA 方式に従って、入力文字列の Unicode (UTF-8) 表現を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

入力値に対する IDNA の仕組みに従い、入力文字列の ASCII 表現を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

各単語の先頭文字を大文字にした `s` を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

各単語の先頭文字を大文字に変換した `s` を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

バイト列が有効な UTF-8 でエンコードされたテキストを構成している場合は `1`、そうでない場合は `0` を返します。[`UInt8`](/ja/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

2 つのバイト文字列の [Jaro 類似度](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#Jaro_similarity) を計算します。

**構文**

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

**引数**

* `s1` — 1 つ目の入力文字列。[`String`](/ja/reference/data-types/string)
* `s2` — 2 つ目の入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

2 つの文字列間の Jaro 類似度を返します。[`Float64`](/ja/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

2つのバイト文字列間の [Jaro-Winkler similarity](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance) を計算します。

**構文**

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

**引数**

* `s1` — 1 つ目の入力文字列。[`String`](/ja/reference/data-types/string)
* `s2` — 2 つ目の入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

2 つの文字列間の Jaro-Winkler 類似度を返します。[`Float64`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring)
* `offset` — オフセットを表すバイト数です。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

戻り値:

* `offset` が正の場合、文字列の左側から `offset` バイト分の `s` の部分文字列を返します。
* `offset` が負の場合、文字列の左側から `length(s) - |offset|` バイト分の `s` の部分文字列を返します。
* `length` が `0` の場合は空文字列を返します。
  [`String`](/ja/reference/data-types/string)

**例**

**正の offset**

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

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

**負のオフセット**

```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`](/ja/reference/data-types/string)
* `length` — 結果の文字列の長さです。値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。 [`(U)Int*`](/ja/reference/data-types/int-uint)
* `pad_string` — 任意。入力文字列のパディングに使用する文字列です。指定しない場合、入力文字列は空白でパディングされます。 [`String`](/ja/reference/data-types/string)

**戻り値**

指定した長さになるよう左側がパディングされた文字列を返します。 [`String`](/ja/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

UTF-8文字列の左側を、結果の文字列が指定した長さに達するまで、空白または指定した文字列 (必要に応じて複数回) で埋めます。
文字列長をバイト単位で測定する [`leftPad`](#leftPad) とは異なり、こちらはコードポイント単位で文字列長を測定します。

**構文**

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

**引数**

* `string` — パディング対象の入力文字列です。[`String`](/ja/reference/data-types/string)
* `length` — 結果の文字列の長さです。値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。[`(U)Int*`](/ja/reference/data-types/int-uint)
* `pad_string` — 省略可能です。入力文字列のパディングに使用する文字列です。指定しない場合、入力文字列は空白でパディングされます。[`String`](/ja/reference/data-types/string)

**戻り値**

指定した長さになるよう左側をパディングした文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring)
* `offset` — オフセットのバイト数。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

返される値:

* `offset` が正の場合、文字列の左側から `offset` バイト分の `s` の部分文字列を返します。\n"
* `offset` が負の場合、文字列の左側から `length(s) - |offset|` バイト分の `s` の部分文字列を返します。\n"
* `length` が 0 の場合は空文字列を返します。
  [`String`](/ja/reference/data-types/string)

**例**

**正のオフセット**

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

文字列の長さを、バイト数や文字数ではなく、Unicode コードポイント数で返します。
文字列には有効な UTF-8 でエンコードされたテキストが含まれていることを前提としています。
この前提が満たされない場合でも例外はスローされず、結果は未定義です。

**構文**

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

**別名**: `CHARACTER_LENGTH`, `CHAR_LENGTH`

**引数**

* `s` — 有効な UTF-8 でエンコードされたテキストを含む文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

文字列 `s` の長さ (Unicode コードポイント単位) 。[`UInt64`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

`s` を小文字に変換した文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

小文字の文字列を返します。[`String`](/ja/reference/data-types/string)

**例**

**1つ目**

```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`](/ja/reference/data-types/string)

**戻り値**

`s` から生成されたナチュラルソートキー文字列を返します。[`String`](/ja/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

[NFC正規化形式](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)に従って、UTF-8文字列を正規化します。

**構文**

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

**引数**

* `str` — UTF-8 でエンコードされた入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

UTF-8 文字列を NFC 形式に正規化した結果を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

UTF-8 文字列の NFD 正規化後の形式を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

UTF-8 文字列を NFKC で正規化した形式を返します。 [`String`](/ja/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 正規化を適用した後にケースフォールディングを行うものです。
識別子の大文字と小文字を区別しないマッチングに役立ちます。

**構文**

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

**引数**

* `str` — UTF-8 でエンコードされた入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

UTF-8 文字列の NFKC\_Casefold 正規化後の文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

UTF-8 文字列を NFKD で正規化した形式を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

入力値の平文を返します。[`String`](/ja/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) 表現を返します。
文字列は UTF-8 でエンコードされている必要があり、そうでない場合の動作は未定義です。

**構文**

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

**引数**

* `s` — 入力値。[`String`](/ja/reference/data-types/string)

**戻り値**

入力値のPunycode表現を返します。[`String`](/ja/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

正規表現パターンに一致し、正規表現のグループ索引に対応する `haystack` 内の最初の文字列を抽出します。

**構文**

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

**別名**: `REGEXP_EXTRACT`

**引数**

* `haystack` — 正規表現パターンの照合対象となる String。[`String`](/ja/reference/data-types/string)
* `pattern` — String、正規表現。`pattern` には複数の正規表現グループを含めることができ、`index` は抽出する正規表現グループを示します。インデックス 0 は、正規表現全体との一致を意味します。[`const String`](/ja/reference/data-types/string)
* `index` — 省略可能。0 以上の整数で、デフォルト値は 1 です。抽出する正規表現グループを表します。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

一致した文字列を返します。[`String`](/ja/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

`haystack` 内で `pattern` に一致する `occurrence` 番目の出現位置を、バイト位置 `position` から検索して返します (1始まりのバイト位置) 。

`return_option` が 0 (デフォルト) の場合は、一致の先頭バイト位置を返します。1 の場合は、一致の直後の先頭バイト位置を返します。

`subexpression` が 0 より大きい場合は、一致全体ではなく、対応するキャプチャグループの位置を返します。

一致が見つからない場合、または要求したキャプチャグループが一致に含まれていない場合は 0 を返します。

PostgreSQL の `regexp_instr` との互換性のために提供されています (このエイリアスでも公開されています) 。位置はバイト単位で、他の ClickHouse の正規表現関数と同様です。PostgreSQL の `regexp_instr` は文字単位です。

**構文**

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

**別名**: `regexpInstr`, `regexp_instr`

**引数**

* `haystack` — 検索対象の文字列。[`String`](/ja/reference/data-types/string)
* `pattern` — 正規表現のパターン。[`const String`](/ja/reference/data-types/string)
* `position` — 任意。検索を開始する 1 始まりのバイト位置。デフォルト: 1。[`(U)Int*`](/ja/reference/data-types/int-uint)
* `occurrence` — 任意。何番目の一致を返すかを指定します。デフォルト: 1。[`(U)Int*`](/ja/reference/data-types/int-uint)
* `return_option` — 任意。0 は一致の開始位置を返し、1 は一致直後の位置を返します。デフォルト: 0。[`(U)Int*`](/ja/reference/data-types/int-uint)
* `flags` — 任意。正規表現フラグ。対応: `i` (大文字と小文字を区別しない) 、`c` (大文字と小文字を区別する) 、`m`/`n` (複数行アンカー) 、`s` (ドットが改行にも一致) 。デフォルト: 空文字列。[`const String`](/ja/reference/data-types/string)
* `subexpression` — 任意。位置を返すキャプチャグループのインデックス。0 は一致全体を意味します。デフォルト: 0。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

一致した位置のバイト位置を返します。見つからない場合は 0 を返します。[`UInt64`](/ja/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

文字を NFD で分解し、結合文字のマーク (Unicode カテゴリ Mn) を除去した後に NFC で再構成することで、UTF-8 文字列からダイアクリティカルマーク (アクセント) を削除します。

**構文**

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

**別名**: `removeAccentsUTF8`

**引数**

* `str` — UTF-8 でエンコードされた入力文字列。 [`String`](/ja/reference/data-types/string)

**戻り値**

発音区別符号が削除された UTF-8 文字列。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `n` — 文字列を繰り返す回数です。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

文字列 `s` を `n` 回繰り返した文字列です。`n` が負の場合、関数は空文字列を返します。[`String`](/ja/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

文字列中の Unicode コードポイント列を逆順にします。
文字列には有効な UTF-8 でエンコードされたテキストが含まれていることを前提としています。
この前提が満たされていない場合でも例外はスローされず、結果は未定義です。

**構文**

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

**引数**

* `s` — 有効な UTF-8 でエンコードされたテキストを含む String。[`String`](/ja/reference/data-types/string)

**戻り値**

Unicode コードポイントの並びを逆順にした文字列。[`String`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring)
* `offset` — オフセットのバイト数。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

以下を返します。

* `offset` が正の場合、文字列の右側から `offset` バイト分の `s` の部分文字列。
* `offset` が負の場合、文字列の右側から `length(s) - |offset|` バイト分の `s` の部分文字列。
* `length` が `0` の場合は空文字列。
  [`String`](/ja/reference/data-types/string)

**例**

**正のオフセット**

```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`](/ja/reference/data-types/string)
* `length` — 結果の文字列の長さです。値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。 [`(U)Int*`](/ja/reference/data-types/int-uint)
* `pad_string` — 省略可能です。入力文字列の右側を埋めるための文字列です。指定しない場合、入力文字列は空白で埋められます。 [`String`](/ja/reference/data-types/string)

**戻り値**

指定した長さになるよう右側が埋められた文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `length` — 生成される文字列の長さです。値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。[`(U)Int*`](/ja/reference/data-types/int-uint)
* `pad_string` — 任意。入力文字列を埋めるために使用する文字列です。指定しない場合、入力文字列は空白で埋められます。[`String`](/ja/reference/data-types/string)

**戻り値**

指定した長さになるよう右側が埋められた文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring)
* `offset` — オフセットのバイト数。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

返される値:

* `offset` が正の場合、文字列の右側から `offset` バイト分の `s` の部分文字列を返します。
* `offset` が負の場合、文字列の右側から `length(s) - |offset|` バイト分の `s` の部分文字列を返します。
* `length` が `0` の場合は空文字列を返します。
  [`String`](/ja/reference/data-types/string)

**例**

**正の offset**

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

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

**負の OFFSET**

```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`](/ja/reference/data-types/string)

**戻り値**

入力文字列の Soundex コードを返します。[`String`](/ja/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*`](/ja/reference/data-types/int-uint)

**戻り値**

空白を `n` 回繰り返した文字列を返します。`n <= 0` の場合、関数は空文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)
* `min_ngram_length` — 任意。抽出する N-gram の最小長です。デフォルト値および最小値は 3 です。[`UInt*`](/ja/reference/data-types/int-uint)
* `max_ngram_length` — 任意。抽出する N-gram の最大長です。デフォルト値は 100 です。`min_ngram_length` 以上である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)
* `min_cutoff_length` — 任意。指定した場合、長さが `min_cutoff_length` 以上の N-gram のみを返します。デフォルト値は `min_ngram_length` と同じです。`min_ngram_length` 以上かつ `max_ngram_length` 以下である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)

**戻り値**

選択された部分文字列の配列を返します。[`Array(String)`](/ja/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`](/ja/reference/data-types/string)
* `min_ngram_length` — 任意。抽出する N-gram の最小長です。デフォルト値および最小値は 3 です。[`UInt*`](/ja/reference/data-types/int-uint)
* `max_ngram_length` — 任意。抽出する N-gram の最大長です。デフォルト値は 100 です。`min_ngram_length` 以上である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)
* `min_cutoff_length` — 任意。指定した場合、長さが `min_cutoff_length` 以上の N-gram のみを返します。デフォルト値は `min_ngram_length` と同じです。`min_ngram_length` 以上かつ `max_ngram_length` 以下である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)

**戻り値**

選択された部分文字列の CRC32 ハッシュからなる配列を返します。[`Array(UInt32)`](/ja/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`](/ja/reference/data-types/string)
* `min_ngram_length` — 任意。抽出される N-gram の最小長です。デフォルト値および最小値は 3 です。[`UInt*`](/ja/reference/data-types/int-uint)
* `max_ngram_length` — 任意。抽出される N-gram の最大長です。デフォルト値は 100 です。`min_ngram_length` 以上である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)
* `min_cutoff_length` — 任意。指定した場合、長さが `min_cutoff_length` 以上の N-gram のみが返されます。デフォルト値は `min_ngram_length` と同じです。`min_ngram_length` 以上、`max_ngram_length` 以下である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)

**戻り値**

選択された UTF-8 の部分文字列の CRC32 ハッシュからなる配列を返します。[`Array(UInt32)`](/ja/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`](/ja/reference/data-types/string)
* `min_ngram_length` — 省略可能。抽出する `N-gram` の最小長です。デフォルト値および最小値は 3 です。[`UInt*`](/ja/reference/data-types/int-uint)
* `max_ngram_length` — 省略可能。抽出する `N-gram` の最大長です。デフォルト値は 100 です。`min_ngram_length` 以上である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)
* `min_cutoff_length` — 省略可能。指定した場合、長さが `min_cutoff_length` 以上の N-gram のみを返します。デフォルト値は `min_ngram_length` と同じです。`min_ngram_length` 以上、`max_ngram_length` 以下である必要があります。[`UInt*`](/ja/reference/data-types/int-uint)

**戻り値**

選択された UTF-8 部分文字列の配列を返します。[`Array(String)`](/ja/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`](/ja/reference/data-types/string)
* `prefix` — 照合するプレフィックス。[`String`](/ja/reference/data-types/string)

**戻り値**

`s` が `prefix` で始まる場合は `1`、そうでない場合は `0` を返します。[`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `prefix` — チェックする大文字と小文字を区別しないプレフィックス。[`String`](/ja/reference/data-types/string)

**戻り値**

`s` が大文字と小文字を区別しない `prefix` で始まる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `prefix` — 確認対象の、大文字と小文字を区別しないプレフィックス。[`String`](/ja/reference/data-types/string)

**戻り値**

`s` が大文字と小文字を区別しない `prefix` で始まる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/ja/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

文字列が指定されたプレフィックスで始まるかどうかを確認します。
文字列には、有効な UTF-8 でエンコードされたテキストが含まれていることを前提としています。
この前提が満たされない場合でも、例外はスローされず、結果は未定義です。

**構文**

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

**引数**

* `s` — 判定対象の文字列。 [`String`](/ja/reference/data-types/string)
* `prefix` — 判定するプレフィックス。 [`String`](/ja/reference/data-types/string)

**戻り値**

`s` が `prefix` で始まる場合は `1`、そうでない場合は `0` を返します。 [`UInt8`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

文字列内のバイト分布のシャノンエントロピーを返します。[`Float64`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

文字列内の異なるバイトの数を返します。[`UInt16`](/ja/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

2つのバイト列間の[ジャッカード類似度指数](https://en.wikipedia.org/wiki/Jaccard_index)を計算します。

**構文**

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

**引数**

* `s1` — 1つ目の入力文字列。[`String`](/ja/reference/data-types/string)
* `s2` — 2つ目の入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

2つの文字列のジャッカード類似度指数を返します。[`Float64`](/ja/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` — 1つ目の入力UTF-8文字列。 [`String`](/ja/reference/data-types/string)
* `s2` — 2つ目の入力UTF-8文字列。 [`String`](/ja/reference/data-types/string)

**戻り値**

2つのUTF-8文字列のジャッカード類似度指数を返します。 [`Float64`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring) または [`Enum`](/ja/reference/data-types/enum)
* `offset` — `s` 内での部分文字列の開始位置。[`(U)Int*`](/ja/reference/data-types/int-uint)
* `length` — 省略可能。部分文字列の最大長。[`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

`offset` から始まる、長さ `length` バイトの `s` の部分文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)
* `delim` — 分割に使用する区切り文字です。 [`String`](/ja/reference/data-types/string)
* `count` — 部分文字列を抽出する前に数える区切り文字の出現回数です。`count` が正の場合は、最後の区切り文字 (左から数えた場合) より左側のすべてが返されます。`count` が負の場合は、最後の区切り文字 (右から数えた場合) より右側のすべてが返されます。 [`UInt`](/ja/reference/data-types/int-uint) または [`Int`](/ja/reference/data-types/int-uint)

**戻り値**

`s` のうち、`delim` が `count` 回出現する位置より前の部分文字列を返します。 [`String`](/ja/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

Unicode コードポイント単位で、区切り文字 `delim` が `count` 回出現する位置より前にある `s` の部分文字列を返します。
文字列には有効な UTF-8 でエンコードされたテキストが含まれていることを前提とします。
この前提が満たされない場合でも、例外はスローされず、結果は未定義です。

**構文**

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

**引数**

* `s` — 部分文字列を抽出する対象の文字列です。[`String`](/ja/reference/data-types/string)
* `delim` — 分割に使用する文字です。[`String`](/ja/reference/data-types/string)
* `count` — 部分文字列を抽出する前に数える区切り文字の出現回数です。`count` が正の場合は、最後の区切り文字 (左から数える) より左側のすべてが返されます。`count` が負の場合は、最後の区切り文字 (右から数える) より右側のすべてが返されます。[`UInt`](/ja/reference/data-types/int-uint) または [`Int`](/ja/reference/data-types/int-uint)

**戻り値**

`delim` が `count` 回出現する位置より前の `s` の部分文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string) または [`FixedString`](/ja/reference/data-types/fixedstring) または [`Enum`](/ja/reference/data-types/enum)
* `offset` — `s` 内での部分文字列の開始位置です。[`Int`](/ja/reference/data-types/int-uint) または [`UInt`](/ja/reference/data-types/int-uint)
* `length` — 部分文字列の最大長です。省略可能です。[`Int`](/ja/reference/data-types/int-uint) または [`UInt`](/ja/reference/data-types/int-uint)

**戻り値**

コードポイント位置 `offset` から始まる、`length` 個のコードポイントからなる `s` の部分文字列を返します。[`String`](/ja/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 エンコーディングに変換します。
不正な文字が複数連続している場合は、1 つの置換文字にまとめられます。

**構文**

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

**引数**

* `s` — `String` データ型のオブジェクトとして表される任意のバイト列。[`String`](/ja/reference/data-types/string)

**戻り値**

有効な UTF-8 文字列を返します。[`String`](/ja/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) を取り除きます。

**Syntax**

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

**別名**: `trim`

**引数**

* `s` — トリムする文字列。[`String`](/ja/reference/data-types/string)
* `trim_characters` — 任意。トリムする文字。指定しない場合は、一般的な空白文字が削除されます。[`String`](/ja/reference/data-types/string)

**戻り値**

指定した文字を両端からトリムした文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)
* `trim_characters` — 省略可能。トリムする文字。指定しない場合は、一般的な空白文字が削除されます。 [`String`](/ja/reference/data-types/string)

**戻り値**

左側から指定した文字がトリムされた文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `trim_characters` — 省略可能な、トリムする文字です。指定しない場合は、一般的な空白文字が削除されます。 [`String`](/ja/reference/data-types/string)

**戻り値**

右側から指定した文字をトリムした文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をデコードした値を含む文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `expected_size` — 任意。デコード後の想定サイズ (バイト単位) 。32 または 64 の場合は最適化されたデコーダーが使用され、それ以外の値では汎用デコーダーが使用されます。[`UInt8, UInt16, UInt32, or UInt64`](/ja/reference/data-types/int-uint)

**戻り値**

引数のデコードされた値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をデコードした値を含む文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

引数をデコードした値を含む文字列を返します。[`String`](/ja/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) の仕組みに従い、ドメイン名の Unicode (UTF-8) 表現 (ToUnicode アルゴリズム) を返します。
エラーが発生した場合は、例外をスローする代わりに空文字列を返します。

**構文**

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

**引数**

* `s` — 入力文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

入力値のIDNAメカニズムに従って、入力文字列のASCII表現を返します。入力が無効な場合は空文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

入力値の平文を返します。入力が無効な場合は空文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)

**戻り値**

`s` を大文字に変換した文字列を返します。 [`String`](/ja/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型。[`String`](/ja/reference/data-types/string)

**戻り値**

String型の値。[`String`](/ja/reference/data-types/string)

**例**

**使用例**

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

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