メインコンテンツへスキップ
メインコンテンツへスキップ

文字列を扱う関数

文字列の検索および置換に関する関数は、別項で説明しています。

注記

以下のドキュメントは、system.functions システムテーブルから自動生成されています。

CRC32

導入バージョン: v20.1

CRC-32-IEEE 802.3 多項式と初期値 0xffffffff(zlib による実装)を用いて、文字列の CRC32 チェックサムを計算します。

構文

CRC32(s)

引数

  • s — CRC32 を計算する対象の文字列。String

戻り値

文字列の CRC32 チェックサムを返します。UInt32

使用例

SELECT CRC32('ClickHouse')
┌─CRC32('ClickHouse')─┐
│          1538217360 │
└─────────────────────┘

CRC32IEEE

導入バージョン: v20.1

CRC-32-IEEE 802.3 多項式を用いて、文字列の CRC32 チェックサムを計算します。

構文

CRC32IEEE(s)

引数

  • s — CRC32 を計算する文字列。String

戻り値

文字列の CRC32 チェックサムを返します。UInt32

使用例

SELECT CRC32IEEE('ClickHouse');
┌─CRC32IEEE('ClickHouse')─┐
│              3089448422 │
└─────────────────────────┘

CRC64

導入バージョン: v20.1

CRC-64-ECMA多項式を使用して、文字列の CRC64 チェックサムを計算します。

構文

CRC64(s)

引数

  • s — CRC64 を計算する文字列。String

戻り値

与えられた文字列の CRC64 チェックサムを返します。UInt64

使用例

SELECT CRC64('ClickHouse');
┌──CRC64('ClickHouse')─┐
│ 12126588151325169346 │
└──────────────────────┘

appendTrailingCharIfAbsent

導入バージョン: v1.1

文字列 s が空でなく、末尾が文字 c でない場合、s の末尾に文字 c を追加します。

構文

appendTrailingCharIfAbsent(s, c)

引数

  • s — 入力文字列。String
  • cs が末尾に持っていない場合に追加する文字。String

戻り値

文字列 s が文字 c で終わっていない場合、末尾に文字 c を追加した文字列を返します。String

使用例

SELECT appendTrailingCharIfAbsent('https://example.com', '/');
┌─appendTraili⋯.com', '/')─┐
│ https://example.com/     │
└──────────────────────────┘

ascii

導入: v22.11

文字列 s の先頭文字の ASCII コードポイントを Int32 として返します。

構文

ascii(s)

引数

  • s — 文字列の入力。String

戻り値

先頭の文字の ASCII コードポイントを返します。s が空の場合、結果は 0 です。先頭の文字が ASCII 文字でない、または UTF-16 の Latin-1 補助範囲に含まれない場合、結果は未定義です。Int32

使用例

SELECT ascii('234')
┌─ascii('234')─┐
│           50 │
└──────────────┘

base32Decode

導入バージョン: v25.6

Base32(RFC 4648)でエンコードされた文字列をデコードします。 文字列が有効な Base32 エンコード形式でない場合は、例外がスローされます。

構文

base32Decode(encoded)

引数

  • encoded — 文字列のカラムまたは定数。String

戻り値

引数のデコードされた値を含む文字列を返します。String

使用例

SELECT base32Decode('IVXGG33EMVSA====');
┌─base32Decode('IVXGG33EMVSA====')─┐
│ Encoded                          │
└──────────────────────────────────┘

base32Encode

導入バージョン: v25.6

文字列を Base32 でエンコードします。

構文

base32Encode(plaintext)

引数

  • plaintext — エンコードするプレーンテキスト。String

戻り値

引数の値をエンコードした文字列を返します。String または FixedString

使用例

SELECT base32Encode('Encoded')
┌─base32Encode('Encoded')─┐
│ IVXGG33EMVSA====        │
└─────────────────────────┘

base58Decode

導入バージョン: v22.7

Base58 文字列をデコードします。 文字列が有効な Base58 エンコード文字列でない場合は、例外がスローされます。

構文

base58Decode(encoded)

引数

  • encoded — デコードする文字列カラムまたは定数。String

戻り値

引数の値をデコードした文字列を返します。String

使用例

SELECT base58Decode('JxF12TrwUP45BMd');
┌─base58Decode⋯rwUP45BMd')─┐
│ Hello World              │
└──────────────────────────┘

base58Encode

導入バージョン: v22.7

文字列を Base58 形式でエンコードします。

構文

base58Encode(plaintext)

引数

  • plaintext — エンコードするプレーンテキスト。String

戻り値

引数をエンコードした値を含む文字列を返します。String

使用例

SELECT base58Encode('ClickHouse');
┌─base58Encode('ClickHouse')─┐
│ 4nhk8K7GHXf6zx             │
└────────────────────────────┘

base64Decode

導入バージョン: v18.16

RFC 4648 に準拠した Base64 表現の文字列をデコードします。 エラーが発生した場合は例外をスローします。

構文

base64Decode(encoded)

エイリアス: FROM_BASE64

引数

  • encoded — デコードする文字列カラムまたは定数。文字列が有効な Base64 形式でエンコードされていない場合、例外が発生します。String

戻り値

デコードされた文字列を返します。String

使用例

SELECT base64Decode('Y2xpY2tob3VzZQ==')
┌─base64Decode('Y2xpY2tob3VzZQ==')─┐
│ clickhouse                       │
└──────────────────────────────────┘

base64Encode

導入バージョン: v18.16

文字列を Base64 形式でエンコードします(RFC 4648 に準拠)。

構文

base64Encode(plaintext)

別名: TO_BASE64

引数

  • plaintext — デコード対象のプレーンテキストのカラムまたは定数。String

戻り値

引数のエンコードされた値を含む文字列を返します。String

使用例

SELECT base64Encode('clickhouse')
┌─base64Encode('clickhouse')─┐
│ Y2xpY2tob3VzZQ==           │
└────────────────────────────┘

base64URLDecode

v24.6 で導入

URL セーフなアルファベットを使用し、RFC 4648 に従って Base64 表現から文字列をデコードします。 エラーが発生した場合は例外をスローします。

構文

base64URLDecode(encoded)

引数

  • encoded — エンコードする文字列カラムまたは定数。有効な Base64 エンコードではない文字列の場合は、例外がスローされます。String

戻り値

引数をデコードした値を含む文字列を返します。String

使用例

SELECT base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')
┌─base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐
│ https://clickhouse.com                            │
└───────────────────────────────────────────────────┘

base64URLEncode

導入バージョン: v18.16

文字列を Base64(RFC 4648)表現に、URL セーフなアルファベットを使用してエンコードします。

構文

base64URLEncode(plaintext)

引数

  • plaintext — エンコードするプレーンテキストのカラムまたは定数。String

戻り値

引数のエンコードされた値を含む文字列を返します。String

使用例

SELECT base64URLEncode('https://clickhouse.com')
┌─base64URLEncode('https://clickhouse.com')─┐
│ aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ            │
└───────────────────────────────────────────┘

basename

導入: v20.1

文字列中で最後に現れるスラッシュまたはバックスラッシュの直後から末尾までの部分文字列を抽出します。 この関数は、パスからファイル名を抽出する用途でよく使用されます。

構文

basename(expr)

引数

  • expr — 文字列表現。バックスラッシュはエスケープする必要があります。String

戻り値

入力文字列の最後のスラッシュまたはバックスラッシュ以降の部分を返します。入力文字列がスラッシュまたはバックスラッシュで終わる場合、関数は空文字列を返します。スラッシュやバックスラッシュが含まれない場合は元の文字列を返します。String

Unix パスからファイル名を抽出する

SELECT 'some/long/path/to/file' AS a, basename(a)
┌─a──────────────────────┬─basename('some/long/path/to/file')─┐
│ some/long/path/to/file │ file                               │
└────────────────────────┴────────────────────────────────────┘

Windows のパスからファイル名を抽出

SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file                                   │
└────────────────────────┴────────────────────────────────────────┘

パス区切り文字を含まない文字列

SELECT 'some-file-name' AS a, basename(a)
┌─a──────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name             │
└────────────────┴────────────────────────────┘

byteHammingDistance

導入: v23.9

2つのバイト列間のハミング距離を計算します。

構文

byteHammingDistance(s1, s2)

別名: mismatches

引数

  • s1 — 1 つ目の入力文字列。String
  • s2 — 2 つ目の入力文字列。String

戻り値

2 つの文字列のハミング距離を返します。UInt64

使用例

SELECT byteHammingDistance('karolin', 'kathrin')
┌─byteHammingDistance('karolin', 'kathrin')─┐
│                                         3 │
└───────────────────────────────────────────┘

compareSubstrings

バージョン v25.2 で導入。

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

構文

compareSubstrings(s1, s2, s1_offset, s2_offset, num_bytes)

引数

  • s1 — 比較する最初の文字列。String
  • s2 — 比較する2番目の文字列。String
  • s1_offset — 比較を開始する s1 内の位置(0始まりのインデックス)。UInt*
  • s2_offset — 比較を開始する s2 内の位置(0始まりのインデックス)。UInt*
  • num_bytes — 両方の文字列で比較するバイト数の上限。s1_offset(または s2_offset) + num_bytes が入力文字列の末尾を超える場合、num_bytes はそれに応じて調整されます。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] の場合は 1Int8

使用例

SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result
┌─result─┐
│      0 │
└────────┘

concat

導入バージョン: v1.1

指定された引数を連結します。

String または FixedString 型ではない引数は、デフォルトのシリアライゼーションを使用して文字列に変換されます。 これはパフォーマンスが低下するため、String/FixedString 以外の引数の使用は推奨されません。

構文

concat([s1, s2, ...])

引数

  • s1, s2, ... — 任意の型の値を任意の数だけ指定できます。Any

戻り値

引数を連結して作成された String を返します。いずれかの引数が NULL の場合、関数は NULL を返します。引数が 1 つも指定されない場合は、空文字列を返します。Nullable(String)

文字列の連結

SELECT concat('Hello, ', 'World!')
┌─concat('Hello, ', 'World!')─┐
│ Hello, World!               │
└─────────────────────────────┘

数値の連結

SELECT concat(42, 144)
┌─concat(42, 144)─┐
│ 42144           │
└─────────────────┘

concatAssumeInjective

v1.1 で導入

concat と同様ですが、concat(s1, s2, ...) → sn が単射であると仮定します。 つまり、異なる引数に対しては必ず異なる結果を返します。

GROUP BY の最適化に利用できます。

構文

concatAssumeInjective([s1, s2, ...])

引数

  • s1, s2, ... — 任意の型の値を任意個指定できます。String または FixedString

戻り値

引数を連結して生成した文字列を返します。いずれかの引数の値が NULL の場合、関数は NULL を返します。引数が指定されていない場合は、空文字列を返します。String

GROUP BY の最適化

SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2)
┌─concat(key1, key2)─┬─sum(value)─┐
│ Hello, World!      │          3 │
│ Hello, World!      │          2 │
│ Hello, World       │          3 │
└────────────────────┴────────────┘

concatWithSeparator

導入バージョン: v22.12

指定した区切り文字で区切って、渡された文字列を連結します。

構文

concatWithSeparator(sep[, exp1, exp2, ...])

エイリアス: concat_ws

引数

  • sep — 使用する区切り文字。const String または const FixedString
  • exp1, exp2, ... — 連結する式。String または FixedString 型ではない引数は、デフォルトのシリアライゼーションを使用して文字列に変換されます。これはパフォーマンスを低下させるため、非 String/FixedString 型の引数の使用は推奨されません。Any

戻り値

引数を連結して作成された String を返します。いずれかの引数の値が NULL の場合、関数は NULL を返します。String

使用例

SELECT concatWithSeparator('a', '1', '2', '3', '4')
┌─concatWithSeparator('a', '1', '2', '3', '4')─┐
│ 1a2a3a4                                      │
└──────────────────────────────────────────────┘

concatWithSeparatorAssumeInjective

導入バージョン: v22.12

concatWithSeparator と同様ですが、concatWithSeparator(sep[,exp1, exp2, ... ]) → result が単射であると仮定します。 関数が異なる引数に対して常に異なる結果を返す場合、その関数は単射と呼ばれます。

GROUP BY 句の最適化に使用できます。

構文

concatWithSeparatorAssumeInjective(sep[, exp1, exp2, ... ])

引数

  • sep — 使用する区切り文字。const String または const FixedString
  • exp1, exp2, ... — 連結する式。型が String または FixedString ではない引数は、デフォルトのシリアライゼーションを使用して文字列に変換されます。これはパフォーマンスを低下させるため、String / FixedString 型以外の引数の使用は推奨されません。String または FixedString

戻り値

引数を連結して作成された文字列を返します。いずれかの引数の値が NULL の場合、関数は NULL を返します。String

使用例

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);
┌─full_name───┬─total_score─┐
│ Jane-Smith  │         240 │
│ John-Doe    │         100 │
│ John-Wilson │         120 │
└─────────────┴─────────────┘

conv

導入: v1.1

異なる基数間で数値を変換します。

この関数は、ある基数で表された数値を別の基数に変換します。サポートされる基数は 2 から 36 です。 10 を超える基数では、数字 10〜35 を表すために文字 A~Z(大文字小文字は区別されません)が使用されます。

この関数は MySQL の CONV() 関数と互換性があります。

構文

conv(number, from_base, to_base)

引数

  • number — 変換する数。文字列または数値型を指定できます。 - from_base — 変換元の基数 (2〜36)。整数である必要があります。 - to_base — 変換先の基数 (2〜36)。整数である必要があります。

戻り値

変換先の基数で表した数値の文字列表現。

10 進数を 2 進数に変換する

SELECT conv('10', 10, 2)
1010

16進数から10進数への変換

SELECT conv('FF', 16, 10)
255

負の数での変換

SELECT conv('-1', 10, 16)
FFFFFFFFFFFFFFFF

2進数を8進数に変換

SELECT conv('1010', 2, 8)
12

convertCharset

導入バージョン: v1.1

エンコーディング from でエンコードされた文字列 s を、エンコーディング to に変換して返します。

構文

convertCharset(s, from, to)

引数

  • s — 入力文字列。String
  • from — 変換元の文字エンコーディング。String
  • to — 変換先の文字エンコーディング。String

戻り値

文字列 s をエンコーディング from から to に変換して返します。String

使用例

SELECT convertCharset('Café', 'UTF-8', 'ISO-8859-1');
┌─convertChars⋯SO-8859-1')─┐
│ Caf�                     │
└──────────────────────────┘

damerauLevenshteinDistance

導入バージョン: v24.1

2 つのバイト列間の Damerau-Levenshtein 距離 を計算します。

構文

damerauLevenshteinDistance(s1, s2)

引数

  • s1 — 1 番目の入力文字列。String
  • s2 — 2 番目の入力文字列。String

返される値

2 つの文字列間の Damerau-Levenshtein 距離を返します。UInt64

使用例

SELECT damerauLevenshteinDistance('clickhouse', 'mouse')
┌─damerauLevenshteinDistance('clickhouse', 'mouse')─┐
│                                                 6 │
└───────────────────────────────────────────────────┘

decodeHTMLComponent

導入バージョン: v23.9

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

構文

decodeHTMLComponent(s)

引数

  • s — デコード対象の HTML エンティティを含む文字列。String

戻り値

HTML エンティティをデコードした文字列を返します。String

使用例

SELECT decodeHTMLComponent('&lt;div&gt;Hello &amp; &quot;World&quot;&lt;/div&gt;')
┌─decodeHTMLComponent('&lt;div&gt;Hello &amp; &quot;World&quot;&lt;/div&gt;')─┐
│ <div>Hello & "World"</div>                                                  │
└─────────────────────────────────────────────────────────────────────────────┘

decodeXMLComponent

導入バージョン: v21.2

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

構文

decodeXMLComponent(s)

引数

  • s — デコードすべき XML エンティティを含む文字列。String

戻り値

与えられた文字列の XML エンティティをデコードしたものを返します。String

使用例

SELECT decodeXMLComponent('&lt;tag&gt;Hello &amp; World&lt;/tag&gt;')
┌─decodeXMLCom⋯;/tag&gt;')─┐
│ <tag>Hello & World</tag> │
└──────────────────────────┘

editDistance

導入バージョン: v23.9

2つのバイト列間の編集距離を計算します。

構文

editDistance(s1, s2)

エイリアス: levenshteinDistance

引数

  • s1 — 1番目の入力文字列。String
  • s2 — 2番目の入力文字列。String

戻り値

2つの文字列の編集距離を返します。UInt64

使用例

SELECT editDistance('clickhouse', 'mouse')
┌─editDistance('clickhouse', 'mouse')─┐
│                                   6 │
└─────────────────────────────────────┘

editDistanceUTF8

導入バージョン: v24.6

2つの UTF8 文字列間の編集距離を計算します。

構文

editDistanceUTF8(s1, s2)

別名: levenshteinDistanceUTF8

引数

  • s1 — 1つ目の入力文字列。String
  • s2 — 2つ目の入力文字列。String

戻り値

2つの UTF8 文字列間の編集距離を返します。UInt64

使用例

SELECT editDistanceUTF8('我是谁', '我是我')
┌─editDistanceUTF8('我是谁', '我是我')──┐
│                                   1 │
└─────────────────────────────────────┘

encodeXMLComponent

導入バージョン: v21.1

文字をエスケープして、文字列を XML のテキストノードまたは属性値として安全に使用できるようにします。

構文

encodeXMLComponent(s)

引数

  • s — エスケープする文字列。String

戻り値

エスケープされた文字列を返します。String

使用例

SELECT
    '<tag>Hello & "World"</tag>' AS original,
    encodeXMLComponent('<tag>Hello & "World"</tag>') AS xml_encoded;
┌─original───────────────────┬─xml_encoded──────────────────────────────────────────┐
│ <tag>Hello & "World"</tag> │ &lt;tag&gt;Hello &amp; &quot;World&quot;&lt;/tag&gt; │
└────────────────────────────┴──────────────────────────────────────────────────────┘

endsWith

導入バージョン: v1.1

文字列が指定された接尾辞で終わるかどうかを判定します。

構文

endsWith(s, suffix)

引数

  • s — 判定対象の文字列。String
  • suffix — 判定する接尾辞。String

戻り値

ssuffix で終わる場合は 1、それ以外の場合は 0 を返します。UInt8

使用例

SELECT endsWith('ClickHouse', 'House');
┌─endsWith('Cl⋯', 'House')─┐
│                        1 │
└──────────────────────────┘

endsWithCaseInsensitive

導入バージョン: v25.9

文字列が、指定されたサフィックスで大小文字を区別せずに終わっているかどうかを判定します。

構文

endsWithCaseInsensitive(s, suffix)

引数

  • s — チェック対象の文字列。String
  • suffix — 末尾がこの値かどうかを大文字小文字を区別せずにチェックするための接尾辞。String

返り値

s が大文字小文字を区別せずに suffix で終わる場合は 1 を返し、それ以外は 0 を返します。UInt8

使用例

SELECT endsWithCaseInsensitive('ClickHouse', 'HOUSE');
┌─endsWithCaseInsensitive('Cl⋯', 'HOUSE')─┐
│                                       1 │
└─────────────────────────────────────────┘

endsWithCaseInsensitiveUTF8

導入バージョン: v25.9

文字列 s が大文字・小文字を区別せずに suffix で終わるかどうかを返します。 文字列が有効な UTF-8 でエンコードされたテキストであることを前提とします。 この前提が満たされない場合でも、例外はスローされず、結果は未定義になります。

構文

endsWithCaseInsensitiveUTF8(s, suffix)

引数

  • s — チェックする文字列。String
  • suffix — 大文字小文字を区別せずに照合する末尾文字列(サフィックス)。String

戻り値

s が大文字小文字を区別せずに suffix で終わる場合は 1、そうでない場合は 0 を返します。UInt8

使用例

SELECT endsWithCaseInsensitiveUTF8('данных', 'ых');
┌─endsWithCaseInsensitiveUTF8('данных', 'ых')─┐
│                                           1 │
└─────────────────────────────────────────────┘

endsWithUTF8

導入バージョン: v23.8

文字列 ssuffix で終わるかどうかを返します。 文字列が有効な UTF-8 でエンコードされたテキストであると仮定します。 この前提が満たされない場合、例外はスローされず、結果は未定義です。

構文

endsWithUTF8(s, suffix)

引数

  • s — チェック対象の文字列。String
  • suffix — 末尾にあるかを確認する文字列。String

返される値

ssuffix で終わる場合は 1、それ以外の場合は 0 を返します。UInt8

使用例

SELECT endsWithUTF8('данных', 'ых');
┌─endsWithUTF8('данных', 'ых')─┐
│                            1 │
└──────────────────────────────┘

extractTextFromHTML

導入バージョン: v21.3

HTML または XHTML からテキストコンテンツを抽出します。

この関数は HTML タグ、コメント、script/style 要素を削除し、テキストコンテンツのみを残します。次の処理を行います:

  • すべての HTML/XML タグの削除
  • コメント(<!-- -->)の削除
  • script および style 要素とその内容の削除
  • CDATA セクションの処理(内容をそのままコピー)
  • 空白文字の適切な処理と正規化

注意: HTML エンティティはデコードされません。必要に応じて別の関数で処理してください。

構文

extractTextFromHTML(html)

引数

  • html — テキストを抽出する対象の HTML コンテンツを含む文字列。String

戻り値

空白を正規化した抽出済みテキストコンテンツを返します。String

使用例

SELECT extractTextFromHTML('
<html>
    <head><title>Page Title</title></head>
    <body>
        <p>Hello <b>World</b>!</p>
        <script>alert("test");</script>
        <!-- comment -->
    </body>
</html>
');
┌─extractTextFromHTML('<html><head>...')─┐
│ Page Title Hello World!                │
└────────────────────────────────────────┘

firstLine

導入バージョン: v23.7

複数行の文字列の先頭行を返します。

構文

firstLine(s)

引数

  • s — 入力文字列。String

返される値

入力文字列の最初の行、または行区切り文字がない場合は文字列全体を返します。String

使用例

SELECT firstLine('foo\\nbar\\nbaz')
┌─firstLine('foo\nbar\nbaz')─┐
│ foo                        │
└────────────────────────────┘

idnaDecode

導入バージョン: v24.1

Internationalized Domain Names in Applications (IDNA) メカニズムに従い、ドメイン名の Unicode (UTF-8) 表現(ToUnicode アルゴリズム)を返します。 エラーが発生した場合(例えば入力が不正な場合)、入力された文字列がそのまま返されます。 大文字・小文字の正規化が行われるため、idnaEncode()idnaDecode() を繰り返し適用しても、元の文字列が必ずしも返されるとは限らない点に注意してください。

構文

idnaDecode(s)

引数

  • s — 入力文字列。String

戻り値

入力値に対して IDNA メカニズムを適用した Unicode (UTF-8) 表現を返します。String

使用例

SELECT idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')
┌─idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')─┐
│ straße.münchen.de                             │
└───────────────────────────────────────────────┘

idnaEncode

導入バージョン: v24.1

Internationalized Domain Names in Applications(IDNA)メカニズムに従って、ドメイン名の ASCII 表現(ToASCII アルゴリズム)を返します。 入力文字列は UTF でエンコードされており、ASCII 文字列として表現可能である必要があります。そうでない場合は例外がスローされます。

注記

パーセントデコードや、タブ・スペース・制御文字のトリミングは行われません。

構文

idnaEncode(s)

引数

  • s — 入力文字列。String

戻り値

入力値に対して IDNA メカニズムに基づいた、入力文字列の ASCII 表現を返します。String

使用例

SELECT idnaEncode('straße.münchen.de')
┌─idnaEncode('straße.münchen.de')─────┐
│ xn--strae-oqa.xn--mnchen-3ya.de     │
└─────────────────────────────────────┘

initcap

導入バージョン: v23.7

各単語の最初の文字を大文字にし、それ以外を小文字に変換します。 ここでの「単語」とは、英数字が連続した並びであり、英数字以外の文字によって区切られたものを指します。

注記

initcap は各単語の最初の文字だけを大文字に変換するため、アポストロフィや既に大文字を含む単語に対しては、想定外の動作となる場合があります。 これは既知の動作であり、現在のところ修正の予定はありません。

構文

initcap(s)

引数

  • s — 入力文字列。String

返される値

各単語の先頭文字を大文字に変換した s を返します。String

使用例

SELECT initcap('building for fast')
┌─initcap('building for fast')─┐
│ Building For Fast            │
└──────────────────────────────┘

アポストロフィや大文字を含む単語に対する既知の挙動の例

SELECT initcap('John''s cat won''t eat.');
┌─initcap('Joh⋯n\'t eat.')─┐
│ John'S Cat Won'T Eat.    │
└──────────────────────────┘

initcapUTF8

導入バージョン: v23.7

initcap と同様に、initcapUTF8 は各単語の最初の文字を大文字にし、それ以外を小文字に変換します。 文字列が有効な UTF-8 エンコードされたテキストであることを前提とします。 この前提が満たされない場合でも例外はスローされず、結果は未定義になります。

注記

この関数は言語を判別しません。例えばトルコ語では、結果が完全には正しくない可能性があります (i/İ と i/I など)。 あるコードポイントにおいて、大文字と小文字で UTF-8 のバイト列の長さが異なる場合、そのコードポイントに対する結果が正しくない可能性があります。

構文

initcapUTF8(s)

引数

  • s — 入力文字列。String

戻り値

各単語の先頭文字を大文字にした s を返します。String

使用例

SELECT initcapUTF8('не тормозит')
┌─initcapUTF8('не тормозит')─┐
│ Не Тормозит                │
└────────────────────────────┘

isValidASCII

導入バージョン: v25.9

入力の String または FixedString が ASCII バイト (0x00–0x7F) のみで構成されている場合は 1 を返し、それ以外の場合は 0 を返します。入力が有効な ASCII であるケースで高速に動作するよう最適化されています。

構文

別名: isASCII

引数

  • なし。

戻り値

isValidASCII

SELECT isValidASCII('hello') AS is_ascii, isValidASCII('你好') AS is_not_ascii

isValidUTF8

導入バージョン: v20.1

バイト列が有効な UTF-8 でエンコードされたテキストかどうかをチェックします。

構文

isValidUTF8(s)

引数

  • s — UTF-8 でエンコードされたテキストとして有効かどうかを検証する対象の文字列。String

返される値

バイト列が有効な UTF-8 エンコードのテキストであれば 1 を、そうでなければ 0 を返します。UInt8

使用例

SELECT isValidUTF8('\\xc3\\xb1') AS valid, isValidUTF8('\\xc3\\x28') AS invalid
┌─valid─┬─invalid─┐
│     1 │       0 │
└───────┴─────────┘

jaroSimilarity

導入バージョン: v24.1

2 つのバイト列間の Jaro 類似度 を計算します。

構文

jaroSimilarity(s1, s2)

引数

  • s1 — 1つ目の入力文字列。String
  • s2 — 2つ目の入力文字列。String

戻り値

2つの文字列の Jaro 類似度を返します。Float64

使用例

SELECT jaroSimilarity('clickhouse', 'click')
┌─jaroSimilarity('clickhouse', 'click')─┐
│                    0.8333333333333333 │
└───────────────────────────────────────┘

jaroWinklerSimilarity

導入バージョン: v24.1

2つのバイト列間の Jaro-Winkler 類似度 を計算します。

構文

jaroWinklerSimilarity(s1, s2)

引数

  • s1 — 1 つ目の入力文字列。String
  • s2 — 2 つ目の入力文字列。String

戻り値

2 つの文字列間の Jaro-Winkler 類似度を返します。Float64

使用例

SELECT jaroWinklerSimilarity('clickhouse', 'click')
┌─jaroWinklerSimilarity('clickhouse', 'click')─┐
│                           0.8999999999999999 │
└──────────────────────────────────────────────┘

left

導入バージョン: v22.1

文字列 s の先頭(左側)からの offset で指定された位置から始まる部分文字列を返します。

構文

left(s, offset)

引数

  • s — 部分文字列を計算する対象の文字列。String または FixedString
  • offset — オフセットをバイト数で指定した値。(U)Int*

戻り値

次を返します。

  • 正の offset の場合、文字列の左側から始まる、offset バイト分の s の部分文字列。
  • 負の offset の場合、文字列の左側から始まる、length(s) - |offset| バイト分の s の部分文字列。
  • length0 の場合は空文字列。 String

正の offset

SELECT left('Hello World', 5)
Hello

負のオフセット

SELECT left('Hello World', -6)
Hello

leftPad

導入バージョン: v21.8

文字列の左側を、スペースまたは指定した文字列(必要に応じて複数回繰り返し)で埋め、結果の文字列が指定された length に達するまでパディングします。

構文

leftPad(string, length[, pad_string])

エイリアス: lpad

引数

  • string — パディング対象となる入力文字列。String
  • length — 結果となる文字列の長さ。この値が入力文字列の長さより小さい場合、入力文字列は length 文字に切り詰められます。(U)Int*
  • pad_string — 省略可能。入力文字列をパディングする際に使用する文字列。指定されていない場合、入力文字列は空白でパディングされます。String

戻り値

指定された長さの、左側をパディングした文字列を返します。String

使用例

SELECT leftPad('abc', 7, '*'), leftPad('def', 7)
┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐
│ ****abc                │     def           │
└────────────────────────┴───────────────────┘

leftPadUTF8

導入バージョン: v21.8

UTF-8 文字列の左側を空白または指定した文字列(必要に応じて複数回繰り返し)で埋め、結果の文字列が指定された長さに達するまでパディングします。 文字列長をバイト数で測定する leftPad とは異なり、ここでは文字列長はコードポイント数で測定されます。

構文

leftPadUTF8(string, length[, pad_string])

引数

  • string — パディングされる入力文字列。String
  • length — 結果の文字列の長さ。値が入力文字列の長さより小さい場合、入力文字列は length 文字に切り詰められます。(U)Int*
  • pad_string — 省略可能。入力文字列をパディングする際に使用する文字列。指定されていない場合、入力文字列は空白文字でパディングされます。String

戻り値

指定された長さになるよう左側をパディングした文字列を返します。String

使用例

SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7)
┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐
│ ***абвг                     │    дежз                │
└─────────────────────────────┴────────────────────────┘

leftUTF8

導入バージョン: v22.1

UTF-8 でエンコードされた文字列 s について、左側からの offset に基づいて始まる部分文字列を返します。

構文

leftUTF8(s, offset)

引数

  • s — 部分文字列を取得する対象の UTF-8 エンコードされた文字列。String または FixedString
  • offset — オフセットのバイト数。(U)Int*

戻り値

次を返します:

  • 正の offset の場合、文字列の左端から開始し、offset バイト分の s の部分文字列。\n"
  • 負の offset の場合、文字列の左端から開始し、length(s) - |offset| バイト分の s の部分文字列。\n"
  • length が 0 の場合は空文字列。 String

正の offset

SELECT leftUTF8('Привет', 4)
Прив

負のオフセット

SELECT leftUTF8('Привет', -4)
Пр

lengthUTF8

導入バージョン: v1.1

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

構文

lengthUTF8(s)

別名: CHARACTER_LENGTH, CHAR_LENGTH

引数

  • s — 有効な UTF-8 でエンコードされたテキストを含む文字列。String

戻り値

文字列 s の長さ(Unicode コードポイント数)。UInt64

使用例

SELECT lengthUTF8('Здравствуй, мир!')
┌─lengthUTF8('Здравствуй, мир!')─┐
│                             16 │
└────────────────────────────────┘

lower

導入バージョン: v1.1

ASCII 文字列を小文字に変換します。

構文

lower(s)

別名: lcase

引数

  • s — 小文字に変換する文字列。String

返される値

s を小文字に変換した文字列を返します。String

使用例

SELECT lower('CLICKHOUSE')
┌─lower('CLICKHOUSE')─┐
│ clickhouse          │
└─────────────────────┘

lowerUTF8

導入バージョン: v1.1

文字列が有効な UTF-8 でエンコードされたテキストであると仮定して、小文字に変換します。この前提が満たされない場合でも例外はスローされず、結果は未定義です。

構文

lowerUTF8(input)

引数

  • input — 小文字に変換する入力文字列。String

戻り値

小文字に変換された文字列を返します。String

first

SELECT lowerUTF8('München') as Lowerutf8;
münchen

normalizeUTF8NFC

導入バージョン: v21.11

正規化形式 NFC に従って UTF-8 文字列を正規化します。

構文

normalizeUTF8NFC(str)

引数

  • str — UTF-8 でエンコードされた入力文字列。String

戻り値

UTF-8 文字列を NFC 形式に正規化したものを返します。String

使用例

SELECT
'é' AS original, -- e + combining acute accent (U+0065 + U+0301)
length(original),
normalizeUTF8NFC('é') AS nfc_normalized, -- é (U+00E9)
length(nfc_normalized);
┌─original─┬─length(original)─┬─nfc_normalized─┬─length(nfc_normalized)─┐
│ é        │                2 │ é              │                      2 │
└──────────┴──────────────────┴────────────────┴────────────────────────┘

normalizeUTF8NFD

導入バージョン: v21.11

UTF-8 文字列を NFD 正規化形式 に従って正規化します。

構文

normalizeUTF8NFD(str)

引数

  • str — UTF-8 でエンコードされた入力文字列。String

戻り値

UTF-8 文字列を NFD 形式に正規化したものを返します。String

使用例

SELECT
    'é' AS original, -- é (U+00E9)
    length(original),
    normalizeUTF8NFD('é') AS nfd_normalized, -- e + combining acute (U+0065 + U+0301)
    length(nfd_normalized);
┌─original─┬─length(original)─┬─nfd_normalized─┬─length(nfd_normalized)─┐
│ é        │                2 │ é              │                      3 │
└──────────┴──────────────────┴────────────────┴────────────────────────┘

normalizeUTF8NFKC

導入: v21.11

NFKC 正規化形式に従って UTF-8 文字列を正規化します。

構文

normalizeUTF8NFKC(str)

引数

  • str — UTF-8 でエンコードされた入力文字列。String

戻り値

UTF-8 文字列の NFKC 正規化形を返します。String

使用例

SELECT
    '① ② ③' AS original,                            -- Circled number characters
    normalizeUTF8NFKC('① ② ③') AS nfkc_normalized;  -- Converts to 1 2 3
┌─original─┬─nfkc_normalized─┐
│ ① ② ③  │ 1 2 3           │
└──────────┴─────────────────┘

normalizeUTF8NFKD

導入バージョン: v21.11

Unicode 正規化形式 NFKD に従って UTF-8 文字列を正規化します。

構文

normalizeUTF8NFKD(str)

引数

  • str — UTF-8 でエンコードされた入力文字列。String

戻り値

UTF-8 文字列の NFKD 正規化形式を返します。String

使用例

SELECT
    'H₂O²' AS original,                            -- H + subscript 2 + O + superscript 2
    normalizeUTF8NFKD('H₂O²') AS nfkd_normalized;  -- Converts to H 2 O 2
┌─original─┬─nfkd_normalized─┐
│ H₂O²     │ H2O2            │
└──────────┴─────────────────┘

punycodeDecode

導入バージョン: v24.1

Punycode でエンコードされた文字列を UTF-8 でエンコードされたプレーンテキストにデコードして返します。 有効な Punycode エンコード文字列が指定されない場合、例外がスローされます。

構文

punycodeDecode(s)

引数

  • s — Punycode でエンコードされた文字列。String

返り値

入力値のプレーンテキスト(Punycode エンコード前の文字列)を返します。String

使用例

SELECT punycodeDecode('Mnchen-3ya')
┌─punycodeDecode('Mnchen-3ya')─┐
│ München                      │
└──────────────────────────────┘

punycodeEncode

導入バージョン: v24.1

文字列の Punycode 表現を返します。 文字列は UTF-8 でエンコードされている必要があり、そうでない場合の動作は未定義です。

構文

punycodeEncode(s)

引数

戻り値

入力値を Punycode 形式で表現した値を返します。String

使用例

SELECT punycodeEncode('München')
┌─punycodeEncode('München')─┐
│ Mnchen-3ya                │
└───────────────────────────┘

regexpExtract

導入されたバージョン: v23.2

haystack 内で正規表現パターンにマッチし、指定した正規表現グループ番号に対応する最初の文字列を抽出します。

構文

regexpExtract(haystack, pattern[, index])

別名: REGEXP_EXTRACT

引数

  • haystack — 正規表現パターンをマッチさせる対象の文字列。String
  • pattern — 正規表現パターンを表す文字列。pattern には複数の正規表現グループを含めることができ、index はどの正規表現グループを抽出するかを示します。index が 0 の場合は正規表現全体のマッチを意味します。const String
  • index — 省略可能。デフォルト値は 1 の、0 以上の整数値。どの正規表現グループを抽出するかを表します。(U)Int*

戻り値

マッチした文字列を返します。String

使用例

SELECT
    regexpExtract('100-200', '(\\d+)-(\\d+)', 1),
    regexpExtract('100-200', '(\\d+)-(\\d+)', 2),
    regexpExtract('100-200', '(\\d+)-(\\d+)', 0),
    regexpExtract('100-200', '(\\d+)-(\\d+)');
┌─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                                       │
└──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────┘

repeat

導入バージョン: v20.1

指定された回数だけ同じ文字列を連結します。

構文

repeat(s, n)

引数

  • s — 繰り返す文字列。String
  • n — 文字列を繰り返す回数。(U)Int*

戻り値

文字列 sn 回繰り返した文字列。n が負の値の場合は、空文字列を返します。String

使用例

SELECT repeat('abc', 10)
┌─repeat('abc', 10)──────────────┐
│ abcabcabcabcabcabcabcabcabcabc │
└────────────────────────────────┘

reverseUTF8

導入バージョン: v1.1

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

構文

reverseUTF8(s)

引数

  • s — 有効な UTF-8 でエンコードされたテキストを含む文字列。String

戻り値

Unicode コードポイント列を逆順にした文字列を返します。String

使用例

SELECT reverseUTF8('ClickHouse')
esuoHkcilC

導入バージョン: v22.1

文字列 s の末尾(右端)からのオフセット offset を開始位置として、部分文字列を返します。

構文

right(s, offset)

引数

  • s — 部分文字列を取得する対象の文字列。String または FixedString
  • offset — オフセットのバイト数。(U)Int*

戻り値

戻り値:

  • 正の offset の場合、文字列の右端から数えて offset バイトの長さを持つ s の部分文字列。
  • 負の offset の場合、文字列の右端から数えて length(s) - |offset| バイトの長さを持つ s の部分文字列。
  • length0 の場合は空文字列を返します。 String

正の offset

SELECT right('Hello', 3)
llo

負のオフセット

SELECT right('Hello', -3)
lo

rightPad

導入されたバージョン: v21.8

文字列の右端を、スペースまたは指定した文字列(必要に応じて複数回繰り返し)でパディングし、結果の文字列の長さが指定された length に達するまで続けます。

構文

rightPad(string, length[, pad_string])

別名: rpad

引数

  • string — パディング対象の入力文字列。String
  • length — 結果となる文字列の長さ。この値が入力文字列の長さより小さい場合、入力文字列は length 文字に切り詰められます。(U)Int*
  • pad_string — 省略可。入力文字列のパディングに使用する文字列。指定されていない場合、入力文字列はスペースでパディングされます。String

返される値

指定した長さになるように右側へパディングした文字列を返します。String

使用例

SELECT rightPad('abc', 7, '*'), rightPad('abc', 7)
┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐
│ abc****                 │ abc                │
└─────────────────────────┴────────────────────┘

rightPadUTF8

導入バージョン: v21.8

文字列の右側を、スペースまたは指定した文字列で(必要に応じて繰り返し)埋めて、結果の文字列が指定された長さに達するまでパディングします。 文字列の長さをバイト数で測定する rightPad と異なり、ここでは文字列の長さはコードポイント数で測定されます。

構文

rightPadUTF8(string, length[, pad_string])

引数

  • string — パディング対象の入力文字列。String
  • length — 結果となる文字列の長さ。値が入力文字列の長さより小さい場合、入力文字列は length 文字に切り詰められます。(U)Int*
  • pad_string — 省略可。入力文字列をパディングする際に使用する文字列。指定されていない場合、入力文字列はスペースでパディングされます。String

戻り値

指定された長さまで右側がパディングされた文字列を返します。String

使用例

SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7)
┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐
│ абвг***                      │ абвг                    │
└──────────────────────────────┴─────────────────────────┘

rightUTF8

導入: v22.1

UTF-8 エンコードされた文字列 s の右端からのオフセット offset に基づいて取得した部分文字列を返します。

構文

rightUTF8(s, offset)

引数

  • s — 部分文字列を取得する対象の UTF-8 エンコード文字列。String または FixedString
  • offset — オフセットのバイト数。(U)Int*

戻り値

次を返します:

  • offset が正の場合、文字列の右端から数えて offset バイト分の s の部分文字列。
  • offset が負の場合、文字列の右端から数えて length(s) - |offset| バイト分の s の部分文字列。
  • length0 の場合は空文字列。 String

正の offset

SELECT rightUTF8('Привет', 4)
ивет

負のオフセット

SELECT rightUTF8('Привет', -4)
ет

soundex

導入: v23.4

文字列の Soundex コード を返します。

構文

soundex(s)

引数

  • s — 入力文字列。String

戻り値

入力文字列の Soundex コードを返します。String

使用例

SELECT soundex('aksel')
┌─soundex('aksel')─┐
│ A240             │
└──────────────────┘

space

導入バージョン: v23.5

指定された回数分のスペース( )を連結した文字列を返します。

構文

space(n)

引数

  • n — スペースを繰り返す回数。(U)Int*

戻り値

スペースを n 回繰り返した文字列を返します。n <= 0 の場合、関数は空文字列を返します。String

使用例

SELECT space(3) AS res, length(res);
┌─res─┬─length(res)─┐
│     │           3 │
└─────┴─────────────┘

sparseGrams

導入バージョン: v25.5

与えられた文字列に対して、長さが少なくとも n であり、かつその部分文字列の両端にある (n-1)-グラムのハッシュ値が、その部分文字列内部に含まれるどの (n-1)-グラムのハッシュ値よりも厳密に大きくなるような、すべての部分文字列を検出します。 ハッシュ関数として CRC32 を使用します。

構文

sparseGrams(s[, min_ngram_length, max_ngram_length])

引数

  • s — 入力文字列。String
  • min_ngram_length — オプション。抽出される n-gram の最小長さ。デフォルトかつ許容される最小値は 3 です。UInt*
  • max_ngram_length — オプション。抽出される n-gram の最大長さ。デフォルト値は 100。min_ngram_length 以上である必要があります。UInt*
  • min_cutoff_length — オプション。指定された場合、長さが min_cutoff_length 以上の n-gram のみが返されます。デフォルト値は min_ngram_length と同じです。min_ngram_length 以上かつ max_ngram_length 以下である必要があります。UInt*

戻り値

選択された部分文字列の配列を返します。Array(String)

使用例

SELECT sparseGrams('alice', 3)
┌─sparseGrams('alice', 3)────────────┐
│ ['ali','lic','lice','ice']         │
└────────────────────────────────────┘

sparseGramsHashes

導入バージョン: v25.5

指定された文字列のうち、長さが少なくとも n であり、 その部分文字列の両端にある (n-1)-グラムのハッシュが、 その部分文字列内に含まれる任意の (n-1)-グラムのハッシュよりも厳密に大きくなっている すべての部分文字列のハッシュを求めます。 ハッシュ関数として CRC32 を使用します。

構文

sparseGramsHashes(s[, min_ngram_length, max_ngram_length])

引数

  • s — 入力文字列。String
  • min_ngram_length — 省略可。抽出される n-gram の最小長。デフォルトかつ最小値は 3。UInt*
  • max_ngram_length — 省略可。抽出される n-gram の最大長。デフォルト値は 100。min_ngram_length 以上でなければなりません。UInt*
  • min_cutoff_length — 省略可。指定された場合、長さが min_cutoff_length 以上の n-gram のみが返されます。デフォルト値は min_ngram_length と同じです。min_ngram_length 未満であってはならず、max_ngram_length を超えてはなりません。UInt*

戻り値

選択された部分文字列の CRC32 ハッシュ値の配列を返します。Array(UInt32)

使用例

SELECT sparseGramsHashes('alice', 3)
┌─sparseGramsHashes('alice', 3)──────────────────────┐
│ [1481062250,2450405249,4012725991,1918774096]      │
└────────────────────────────────────────────────────┘

sparseGramsHashesUTF8

導入バージョン: v25.5

指定された UTF-8 文字列について、長さが少なくとも n のすべての部分文字列のハッシュを求めます。このとき、その部分文字列の両端にある (n-1)-gram のハッシュが、その部分文字列内部に存在する任意の (n-1)-gram のハッシュよりも厳密に大きいもののみを対象とします。 UTF-8 文字列を想定しており、UTF-8 シーケンスが不正な場合は例外を送出します。 ハッシュ関数として CRC32 を使用します。

構文

sparseGramsHashesUTF8(s[, min_ngram_length, max_ngram_length])

引数

  • s — 入力文字列。String
  • min_ngram_length — 省略可能。抽出される n-gram の最小の長さ。デフォルトかつ最小値は 3。UInt*
  • max_ngram_length — 省略可能。抽出される n-gram の最大の長さ。デフォルト値は 100。min_ngram_length 以上でなければなりません。UInt*
  • min_cutoff_length — 省略可能。指定された場合、長さが min_cutoff_length 以上の n-gram のみが返されます。デフォルト値は min_ngram_length と同じです。min_ngram_length 以上かつ max_ngram_length 以下でなければなりません。UInt*

戻り値

選択された UTF-8 部分文字列の CRC32 ハッシュ値の配列を返します。Array(UInt32)

使用例

SELECT sparseGramsHashesUTF8('алиса', 3)
┌─sparseGramsHashesUTF8('алиса', 3)─┐
│ [4178533925,3855635300,561830861] │
└───────────────────────────────────┘

sparseGramsUTF8

導入バージョン: v25.5

指定された UTF-8 文字列から、長さが少なくとも n であり、その部分文字列の両端にある (n-1)-gram のハッシュ値が、その部分文字列内部に含まれるいずれの (n-1)-gram のハッシュ値よりも厳密に大きくなるような、すべての部分文字列を抽出します。 UTF-8 文字列を入力として受け取り、不正な UTF-8 シーケンスがある場合は例外をスローします。 ハッシュ関数として CRC32 を使用します。

構文

sparseGramsUTF8(s[, min_ngram_length, max_ngram_length])

引数

  • s — 入力文字列。String
  • min_ngram_length — 省略可能。抽出される n-gram の最小長さ。既定値および最小値は 3。UInt*
  • max_ngram_length — 省略可能。抽出される n-gram の最大長さ。既定値は 100。min_ngram_length 以上でなければなりません。UInt*
  • min_cutoff_length — 省略可能。指定された場合、長さが min_cutoff_length 以上の n-gram のみが返されます。既定値は min_ngram_length と同じです。min_ngram_length 未満にはできず、max_ngram_length を超えてはなりません。UInt*

返される値

抽出された UTF-8 部分文字列の配列を返します。Array(String)

使用例

SELECT sparseGramsUTF8('алиса', 3)
┌─sparseGramsUTF8('алиса', 3)─┐
│ ['али','лис','иса']         │
└─────────────────────────────┘

startsWith

導入されたバージョン: v1.1

文字列が指定された文字列で始まるかどうかを判定します。

構文

startsWith(s, prefix)

引数

  • s — チェック対象の文字列。String
  • prefixs の先頭に付いているかどうかを確認するプレフィックス文字列。String

返される値

sprefix で始まる場合は 1、それ以外の場合は 0 を返します。UInt8

使用例

SELECT startsWith('ClickHouse', 'Click');
┌─startsWith('⋯', 'Click')─┐
│                        1 │
└──────────────────────────┘

startsWithCaseInsensitive

導入バージョン: v25.9

文字列が、指定した文字列で大文字小文字を区別せずに始まるかどうかをチェックします。

構文

startsWithCaseInsensitive(s, prefix)

引数

  • s — チェック対象の文字列。String
  • prefix — 大文字小文字を区別せずに先頭一致を確認するための接頭辞。String

戻り値

s が大文字小文字を区別せずに prefix で始まる場合は 1、それ以外は 0 を返します。UInt8

使用例

SELECT startsWithCaseInsensitive('ClickHouse', 'CLICK');
┌─startsWithCaseInsensitive('⋯', 'CLICK')─┐
│                                       1 │
└─────────────────────────────────────────┘

startsWithCaseInsensitiveUTF8

導入バージョン: v25.9

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

構文

startsWithCaseInsensitiveUTF8(s, prefix)

引数

  • s — 確認対象の文字列。String
  • prefix — 大文字小文字を区別せずに比較されるプレフィックス。String

返り値

s の先頭が大文字小文字を区別せずに prefix と一致する場合は 1、それ以外の場合は 0 を返します。UInt8

使用例

SELECT startsWithCaseInsensitiveUTF8('приставка', 'при')
┌─startsWithUT⋯ка', 'при')─┐
│                        1 │
└──────────────────────────┘

startsWithUTF8

導入: v23.8

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

構文

startsWithUTF8(s, prefix)

引数

  • s — チェック対象の文字列。String
  • prefix — 先頭一致を確認するプレフィックス。String

戻り値

sprefix で始まる場合は 1、そうでない場合は 0 を返します。UInt8

使用例

SELECT startsWithUTF8('приставка', 'при')
┌─startsWithUT⋯ка', 'при')─┐
│                        1 │
└──────────────────────────┘

stringBytesEntropy

導入バージョン: v25.6

文字列内のバイト分布に対する Shannon エントロピーを計算します。

構文

stringBytesEntropy(s)

引数

  • s — 解析する文字列。String

返される値

文字列中のバイト分布のシャノンエントロピーを返します。Float64

使用例

SELECT stringBytesEntropy('Hello, world!')
┌─stringBytesEntropy('Hello, world!')─┐
│                         3.07049960  │
└─────────────────────────────────────┘

stringBytesUniq

導入バージョン: v25.6

文字列内に含まれる異なるバイト値の個数を数えます。

構文

stringBytesUniq(s)

引数

  • s — 解析する文字列。String

戻り値

文字列内の異なるバイトの数を返します。UInt16

使用例

SELECT stringBytesUniq('Hello')
┌─stringBytesUniq('Hello')─┐
│                        4 │
└──────────────────────────┘

stringJaccardIndex

導入バージョン: v23.11

2 つのバイト文字列間の Jaccard 類似度 を計算します。

構文

stringJaccardIndex(s1, s2)

引数

  • s1 — 1 番目の入力文字列。String
  • s2 — 2 番目の入力文字列。String

戻り値

2 つの文字列間の Jaccard 類似度指数を返します。Float64

使用例

SELECT stringJaccardIndex('clickhouse', 'mouse')
┌─stringJaccardIndex('clickhouse', 'mouse')─┐
│                                       0.4 │
└───────────────────────────────────────────┘

stringJaccardIndexUTF8

導入バージョン: v23.11

stringJaccardIndex と同様ですが、UTF-8 でエンコードされた文字列を対象とします。

構文

stringJaccardIndexUTF8(s1, s2)

引数

  • s1 — 1つ目の入力 UTF8 文字列。String
  • s2 — 2つ目の入力 UTF8 文字列。String

返り値

2つの UTF8 文字列の Jaccard 類似度を返します。Float64

使用例

SELECT stringJaccardIndexUTF8('我爱你', '我也爱你')
┌─stringJaccardIndexUTF8('我爱你', '我也爱你')─┐
│                                       0.75 │
└─────────────────────────────────────────────┘

substring

導入バージョン: v1.1

文字列 s のうち、指定したバイトインデックス offset から始まる部分文字列を返します。 バイトのカウントは、次のルールで 1 から始まります:

  • offset0 の場合、空文字列を返します。
  • offset が負の場合、先頭からではなく、文字列の末尾から offset 文字分戻った位置から部分文字列を開始します。

省略可能な引数 length で、返される部分文字列の最大バイト数を指定します。

構文

substring(s, offset[, length])

別名: byteSlice, mid, substr

引数

  • s — 部分文字列を取得する対象の文字列。String または FixedString または Enum
  • offsets 内の部分文字列の開始位置。(U)Int*
  • length — 省略可能。部分文字列の最大長。(U)Int*

戻り値

offset を開始位置として、length バイトの s の部分文字列を返します。String

基本的な使用例

SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1)
┌─db───────┬─substring('database', 5)─┬─substring('database', 5, 1)─┐
│ database │ base                     │ b                           │
└──────────┴──────────────────────────┴─────────────────────────────┘

substringIndex

導入バージョン: v23.7

Spark や MySQL と同様に、区切り文字 delimcount 回出現する位置より前側の s の部分文字列を返します。

構文

substringIndex(s, delim, count)

別名: SUBSTRING_INDEX

引数

  • s — 部分文字列を抽出する対象の文字列。String
  • delim — 分割に使用する区切り文字。String
  • count — 部分文字列を抽出する前に数える区切り文字の出現回数。count が正の場合、(左から数えて)最後の区切り文字より左側のすべてが返されます。count が負の場合、(右から数えて)最後の区切り文字より右側のすべてが返されます。UInt または Int

返される値

delimcount 回出現する位置より前の s の部分文字列を返します。String

使用例

SELECT substringIndex('www.clickhouse.com', '.', 2)
┌─substringIndex('www.clickhouse.com', '.', 2)─┐
│ www.clickhouse                               │
└──────────────────────────────────────────────┘

substringIndexUTF8

導入バージョン: v23.7

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

構文

substringIndexUTF8(s, delim, count)

引数

  • s — 部分文字列を抽出する対象の文字列。String
  • delim — 分割に使用する文字列。String
  • count — 部分文字列を抽出する前に数える区切り文字の出現回数。count が正の場合は、左から数えて最後の区切り文字より左側の部分が返されます。count が負の場合は、右から数えて最後の区切り文字より右側の部分が返されます。UInt または Int

戻り値

s 内で delimcount 回現れる位置より前の部分文字列を返します。String

UTF8 の例

SELECT substringIndexUTF8('www.straßen-in-europa.de', '.', 2)
www.straßen-in-europa

substringUTF8

導入バージョン: v1.1

文字列 s の指定されたコードポイントインデックス offset から始まる部分文字列を返します。 コードポイントのカウントは、次のロジックで 1 から始まります。

  • offset0 の場合、空文字列を返します。
  • offset が負の値の場合、部分文字列は文字列の先頭からではなく、末尾から offset コードポイント分だけ戻った位置から始まります。

オプション引数 length で、返される部分文字列が含むことができる最大コードポイント数を指定します。

注記

この関数は、文字列が有効な UTF-8 でエンコードされたテキストを含むことを前提としています。 この前提が満たされない場合でも、例外は送出されず、結果は未定義です。

構文

substringUTF8(s, offset[, length])

引数

  • s — 部分文字列を取得する対象の文字列。String または FixedString または Enum
  • offsets 内での部分文字列の開始位置。Int または UInt
  • length — 部分文字列の最大長。省略可能。Int または UInt

返される値

コードポイントインデックス offset から開始し、length 個のコードポイントを含む s の部分文字列を返します。String

使用例

SELECT 'Täglich grüßt das Murmeltier.' AS str, substringUTF8(str, 9), substringUTF8(str, 9, 5)
Täglich grüßt das Murmeltier.    grüßt das Murmeltier.    grüßt

toValidUTF8

導入バージョン: v20.1

不正な UTF-8 文字をすべて置換文字 (U+FFFD) に置き換えることで、文字列を有効な UTF-8 エンコーディングに変換します。 連続する複数の不正な文字が見つかった場合、それらは 1 つの置換文字にまとめられます。

構文

toValidUTF8(s)

引数

  • s — String データ型オブジェクトとして表される任意のバイト列。String

戻り値

有効な UTF-8 文字列を返します。String

使用例

SELECT toValidUTF8('\\x61\\xF0\\x80\\x80\\x80b')
c
┌─toValidUTF8('a����b')─┐
│ a�b                   │
└───────────────────────┘

trimBoth

導入バージョン: v20.1

文字列の先頭および末尾から、指定された文字を削除します。 デフォルトでは、一般的な空白(ASCII)文字を削除します。

構文

trimBoth(s[, trim_characters])

別名: trim

引数

  • s — トリミング対象の文字列。String
  • trim_characters — 省略可能。トリミングする文字。指定しない場合は、一般的な空白文字が除去されます。String

戻り値

先頭および末尾から指定された文字をトリミングした文字列を返します。String

使用例

SELECT trimBoth('$$ClickHouse$$', '$')
┌─trimBoth('$$⋯se$$', '$')─┐
│ ClickHouse               │
└──────────────────────────┘

trimLeft

導入バージョン: v20.1

文字列の先頭から指定された文字を削除します。 デフォルトでは、一般的な空白文字(ASCII)を削除します。

構文

trimLeft(input[, trim_characters])

別名: ltrim

引数

  • input — トリムする文字列。String
  • trim_characters — オプション。トリム対象の文字。指定しない場合は、一般的な空白文字が削除されます。String

戻り値

指定した文字を左側から取り除いた文字列を返します。String

使用例

SELECT trimLeft('ClickHouse', 'Click');
┌─trimLeft('Cl⋯', 'Click')─┐
│ House                    │
└──────────────────────────┘

trimRight

導入バージョン: v20.1

文字列の末尾から指定された文字を削除します。 デフォルトでは、一般的な空白(ASCII)文字を削除します。

構文

trimRight(s[, trim_characters])

別名: rtrim

引数

  • s — 末尾をトリミングする対象の文字列。String
  • trim_characters — 省略可能なトリミング対象の文字の集合。指定しない場合、一般的な空白文字が削除されます。String

戻り値

指定された文字が右端からトリミングされた文字列を返します。String

使用例

SELECT trimRight('ClickHouse','House');
┌─trimRight('C⋯', 'House')─┐
│ Click                    │
└──────────────────────────┘

tryBase32Decode

導入されたバージョン: v25.6

文字列を受け取り、Base32 エンコーディング方式でデコードします。

構文

tryBase32Decode(encoded)

引数

  • encoded — デコードする文字列カラムまたは定数。文字列が有効な Base32 でエンコードされたものでない場合、エラー時には空文字列を返します。String

返り値

引数をデコードした値を含む文字列を返します。String

使用例

SELECT tryBase32Decode('IVXGG33EMVSA====');
┌─tryBase32Decode('IVXGG33EMVSA====')─┐
│ Encoded                             │
└─────────────────────────────────────┘

tryBase58Decode

導入: v22.10

base58Decode と同様ですが、エラーが発生した場合は空文字列を返します。

構文

tryBase58Decode(encoded)

引数

  • encoded — 文字列カラムまたは定数。有効な Base58 でエンコードされた文字列でない場合、エラー時には空文字列を返します。String

戻り値

引数をデコードした値を含む文字列を返します。String

使用例

SELECT tryBase58Decode('3dc8KtHrwM') AS res, tryBase58Decode('invalid') AS res_invalid;
┌─res─────┬─res_invalid─┐
│ Encoded │             │
└─────────┴─────────────┘

tryBase64Decode

導入バージョン: v18.16

base64Decode と同様ですが、エラーが発生した場合には空文字列を返します。

構文

tryBase64Decode(encoded)

引数

  • encoded — デコード対象の文字列カラムまたは定数。文字列が有効な Base64 エンコード文字列でない場合、エラー時には空文字列を返します。String

戻り値

引数のデコード結果を含む文字列を返します。String

使用例

SELECT tryBase64Decode('Y2xpY2tob3VzZQ==')
┌─tryBase64Decode('Y2xpY2tob3VzZQ==')─┐
│ clickhouse                          │
└─────────────────────────────────────┘

tryBase64URLDecode

導入バージョン: v18.16

base64URLDecode と同様ですが、エラーが発生した場合には空文字列を返します。

構文

tryBase64URLDecode(encoded)

引数

  • encoded — デコードする文字列カラムまたは定数。文字列が有効な Base64 エンコードではない場合、エラー時には空文字列を返します。String

戻り値

引数をデコードした値を含む文字列を返します。String

使用例

SELECT tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')
┌─tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐
│ https://clickhouse.com                               │
└──────────────────────────────────────────────────────┘

tryIdnaEncode

導入バージョン: v24.1

Internationalized Domain Names in Applications (IDNA) メカニズムに従って、ドメイン名の Unicode (UTF-8) による表現(ToUnicode アルゴリズム)を返します。 エラーが発生した場合は、例外をスローせず空の文字列を返します。

構文

tryIdnaEncode(s)

引数

  • s — 入力文字列。String

戻り値

入力値の IDNA の仕様に従って、入力文字列の ASCII 表現を返します。入力が不正な場合は空文字列を返します。String

使用例

SELECT tryIdnaEncode('straße.münchen.de')
┌─tryIdnaEncode('straße.münchen.de')──┐
│ xn--strae-oqa.xn--mnchen-3ya.de     │
└─────────────────────────────────────┘

tryPunycodeDecode

導入バージョン: v24.1

punycodeDecode に似ていますが、有効な Punycode でエンコードされた文字列が渡されなかった場合は空文字列を返します。

構文

tryPunycodeDecode(s)

引数

  • s — Punycode でエンコードされた文字列。String

返り値

入力値のプレーンテキストを返します。入力が無効な場合は空文字列を返します。String

使用例

SELECT tryPunycodeDecode('Mnchen-3ya')
┌─tryPunycodeDecode('Mnchen-3ya')─┐
│ München                         │
└─────────────────────────────────┘

upper

導入バージョン: v1.1

文字列内の ASCII ラテン文字を大文字に変換します。

構文

upper(s)

エイリアス: ucase

引数

  • s — 大文字に変換する対象の文字列。String

返り値

s を大文字に変換した文字列を返します。String

使用例

SELECT upper('clickhouse')
┌─upper('clickhouse')─┐
│ CLICKHOUSE          │
└─────────────────────┘

upperUTF8

導入: v1.1

文字列が有効な UTF-8 でエンコードされたテキストであると仮定して、大文字に変換します。 この仮定に反する場合でも、例外はスローされず、結果は未定義です。

注記

この関数は言語を判別しません。そのため、トルコ語などでは結果が完全には正しくない場合があります(i/İ と i/I など)。 あるコードポイントについて、大文字と小文字で UTF-8 のバイト列の長さが異なる場合(ß など)、そのコードポイントについては正しくない結果になる可能性があります。

構文

upperUTF8(s)

引数

返される値

String型の値。String

使用例

SELECT upperUTF8('München') AS Upperutf8
┌─Upperutf8─┐
│ MÜNCHEN   │
└───────────┘