メインコンテンツまでスキップ
メインコンテンツまでスキップ

文字列操作のための関数

文字列の検索文字列の置換に関する関数は、それぞれ別に説明されています。

empty

入力文字列が空かどうかをチェックします。文字列は、空白やヌルバイトを含んでいても、少なくとも1バイトを含んでいる場合、非空と見なされます。

この関数は配列UUIDにも使用できます。

構文

empty(x)

引数

戻り値

  • 空の文字列の場合は 1 を、非空の文字列の場合は 0 を返します。UInt8

SELECT empty('');

結果:

┌─empty('')─┐
│         1 │
└───────────┘

notEmpty

入力文字列が非空かどうかをチェックします。文字列は、空白やヌルバイトを含んでいても、少なくとも1バイトを含んでいる場合、非空と見なされます。

この関数は配列UUIDにも使用できます。

構文

notEmpty(x)

引数

戻り値

  • 非空の文字列の場合は 1 を、空の文字列の場合は 0 を返します。UInt8

SELECT notEmpty('text');

結果:

┌─notEmpty('text')─┐
│                1 │
└──────────────────┘

length

文字列の長さをバイト単位で返します。文字やUnicodeコードポイントではなくバイトで計算します。この関数は配列にも使用できます。

エイリアス: OCTET_LENGTH

構文

length(s)

パラメータ

  • s — 入力文字列または配列。String/Array

戻り値

  • 文字列または配列 s の長さ(バイト単位)。UInt64

クエリ:

SELECT length('Hello, world!');

結果:

┌─length('Hello, world!')─┐
│                      13 │
└─────────────────────────┘

クエリ:

SELECT length([1, 2, 3, 4]);

結果:

┌─length([1, 2, 3, 4])─┐
│                    4 │
└──────────────────────┘

lengthUTF8

文字列の長さをUnicodeコードポイント単位で返します。文字列が有効なUTF-8エンコードされたテキストを含んでいると仮定します。この仮定が破られた場合、例外はスローされず、結果は未定義となります。

エイリアス:

  • CHAR_LENGTH
  • CHARACTER_LENGTH

構文

lengthUTF8(s)

パラメータ

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

戻り値

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

クエリ:

SELECT lengthUTF8('Здравствуй, мир!');

結果:

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

left

文字列 s の指定されたoffsetから左側の部分文字列を返します。

構文

left(s, offset)

パラメータ

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

戻り値

  • 正のoffsetの場合: 文字列の左側からoffsetバイトの部分文字列。
  • 負のoffsetの場合: 文字列の左側から length(s) - |offset| バイトの部分文字列。
  • length が 0 の場合、空の文字列。

クエリ:

SELECT left('Hello', 3);

結果:

Hel

クエリ:

SELECT left('Hello', -3);

結果:

He

leftUTF8

UTF-8エンコードされた文字列 s の指定された offset から左側の部分文字列を返します。

構文

leftUTF8(s, offset)

パラメータ

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

戻り値

  • 正のoffsetの場合: 文字列の左側からoffsetバイトの部分文字列。
  • 負のoffsetの場合: 文字列の左側から length(s) - |offset| バイトの部分文字列。
  • length が 0 の場合、空の文字列。

クエリ:

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

結果:

Прив

クエリ:

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

結果:

Пр

leftPad

文字列を左側からスペースまたは指定された文字列でパディングし、結果の文字列が指定されたlengthに達するまで繰り返します。

構文

leftPad(string, length[, pad_string])

エイリアス: LPAD

引数

  • string — パディングするべき入力文字列。String
  • length — 結果の文字列の長さ。UIntまたはInt。値が入力文字列の長さより小さい場合、入力文字列はlength文字に短縮されます。
  • pad_string — 入力文字列をパディングする文字列。String。オプション。指定されていない場合、入力文字列はスペースでパディングされます。

戻り値

  • 指定された長さの左パディングされた文字列。String

SELECT leftPad('abc', 7, '*'), leftPad('def', 7);

結果:

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

leftPadUTF8

文字列を左側からスペースまたは指定された文字列でパディングし、結果の文字列が指定された長さに達するまで繰り返します。 leftPad はバイト単位で文字列の長さを測定しますが、この関数ではコードポイント単位で測定します。

構文

leftPadUTF8(string, length[, pad_string])

引数

  • string — パディングするべき入力文字列。String
  • length — 結果の文字列の長さ。UIntまたはInt。値が入力文字列の長さより小さい場合、入力文字列はlength文字に短縮されます。
  • pad_string — 入力文字列をパディングする文字列。String。オプション。指定されていない場合、入力文字列はスペースでパディングされます。

戻り値

  • 指定された長さの左パディングされた文字列。String

SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7);

結果:

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

文字列 s の指定された offset から右側の部分文字列を返します。

構文

right(s, offset)

パラメータ

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

戻り値

  • 正の offset の場合: 文字列の右側から offset バイトの部分文字列。
  • 負の offset の場合: 文字列の右側から length(s) - |offset| バイトの部分文字列。
  • length が 0 の場合、空の文字列。

クエリ:

SELECT right('Hello', 3);

結果:

llo

クエリ:

SELECT right('Hello', -3);

結果:

lo

rightUTF8

UTF-8エンコードされた文字列 s の指定された offset から右側の部分文字列を返します。

構文

rightUTF8(s, offset)

パラメータ

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

戻り値

  • 正の offset の場合: 文字列の右側から offset バイトの部分文字列。
  • 負の offset の場合: 文字列の右側から length(s) - |offset| バイトの部分文字列。
  • length が 0 の場合、空の文字列。

クエリ:

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

結果:

ивет

クエリ:

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

結果:

ет

rightPad

文字列を右側からスペースまたは指定された文字列でパディングし、結果の文字列が指定されたlengthに達するまで繰り返します。

構文

rightPad(string, length[, pad_string])

エイリアス: RPAD

引数

  • string — パディングするべき入力文字列。String
  • length — 結果の文字列の長さ。UIntまたはInt。値が入力文字列の長さより小さい場合、入力文字列はlength文字に短縮されます。
  • pad_string — 入力文字列をパディングする文字列。String。オプション。指定されていない場合、入力文字列はスペースでパディングされます。

戻り値

  • 指定された長さの右パディングされた文字列。String

SELECT rightPad('abc', 7, '*'), rightPad('abc', 7);

結果:

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

rightPadUTF8

文字列を右側からスペースまたは指定された文字列でパディングし、結果の文字列が指定された長さに達するまで繰り返します。rightPadはバイト単位で文字列の長さを測定しますが、この関数はコードポイント単位で測定します。

構文

rightPadUTF8(string, length[, pad_string])

引数

  • string — パディングするべき入力文字列。String
  • length — 結果の文字列の長さ。UIntまたはInt。値が入力文字列の長さより小さい場合、入力文字列はlength文字に短縮されます。
  • pad_string — 入力文字列をパディングする文字列。String。オプション。指定されていない場合、入力文字列はスペースでパディングされます。

戻り値

  • 指定された長さの右パディングされた文字列。String

SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7);

結果:

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

compareSubstrings

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

構文

compareSubstrings(string1, string2, string1_offset, string2_offset, num_bytes);

引数

  • string1 — 比較する最初の文字列。String
  • string2 - 比較する2番目の文字列。String
  • string1_offset — 比較開始位置(ゼロベース)を指定する string1 の位置。UInt*
  • string2_offset — 比較開始位置(ゼロベース)を指定する string2 の位置。UInt*
  • num_bytes — 両方の文字列で比較する最大バイト数。 string_offset + num_bytes が入力文字列の終端を超える場合、num_bytes はそれに応じて減少します。UInt*

戻り値

  • -1 — string1[string1_offset : string1_offset + num_bytes] < string2[string2_offset : string2_offset + num_bytes] の場合。
  • 0 — string1[string1_offset : string1_offset + num_bytes] = string2[string2_offset : string2_offset + num_bytes] の場合。
  • 1 — string1[string1_offset : string1_offset + num_bytes] > string2[string2_offset : string2_offset + num_bytes] の場合。

クエリ:

SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result,

結果:

┌─result─┐
│      0 │
└────────┘

lower

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

構文*

lower(input)

エイリアス: lcase

パラメータ

  • input: 文字列型 String

戻り値

  • String データ型の値。

クエリ:

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

upper

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

構文

upper(input)

エイリアス: ucase

パラメータ

  • input — 文字列型 String

戻り値

  • String データ型の値。

クエリ:

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

lowerUTF8

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

注記

言語を検出することはできません。例えばトルコ語の場合、結果は正確でない可能性があります(i/İ と i/I)。もしUTF-8バイトシーケンスの長さが、コードポイントの大文字と小文字で異なる場合(ß のように)、このコードポイントに対して結果が不正確になる可能性があります。

構文

lowerUTF8(input)

パラメータ

  • input — 文字列型 String

戻り値

  • String データ型の値。

クエリ:

SELECT lowerUTF8('MÜNCHEN') as Lowerutf8;

結果:

┌─Lowerutf8─┐
│ münchen   │
└───────────┘

upperUTF8

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

注記

言語を検出することはできません。例えばトルコ語の場合、結果は正確でない可能性があります(i/İ と i/I)。もしUTF-8バイトシーケンスの長さが、コードポイントの大文字と小文字で異なる場合(ß のように)、このコードポイントに対して結果が不正確になる可能性があります。

構文

upperUTF8(input)

パラメータ

  • input — 文字列型 String

戻り値

  • String データ型の値。

クエリ:

SELECT upperUTF8('München') as Upperutf8;

結果:

┌─Upperutf8─┐
│ MÜNCHEN   │
└───────────┘

isValidUTF8

バイトのセットが有効なUTF-8エンコードされたテキストを構成している場合、1を返します。そうでない場合は0を返します。

構文

isValidUTF8(input)

パラメータ

  • input — 文字列型 String

戻り値

  • バイトのセットが有効なUTF-8エンコードされたテキストを構成している場合は1を、そうでない場合は0を返します。

クエリ:

SELECT isValidUTF8('\xc3\xb1') AS valid, isValidUTF8('\xc3\x28') AS invalid;

結果:

┌─valid─┬─invalid─┐
│     1 │       0 │
└───────┴─────────┘

toValidUTF8

無効なUTF-8文字を (U+FFFD) 文字で置き換えます。連続して無効な文字は1つの置換文字にまとめられます。

構文

toValidUTF8(input_string)

引数

  • input_stringString データ型のオブジェクトで表された任意のバイトセット。

戻り値

  • 有効なUTF-8文字列。

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

repeat

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

構文

repeat(s, n)

エイリアス: REPEAT

引数

戻り値

文字列 sn 回繰り返された文字列。もし n <= 0 の場合、関数は空の文字列を返します。String

SELECT repeat('abc', 10);

結果:

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

space

指定された回数だけスペース( )を連結します。

構文

space(n)

エイリアス: SPACE

引数

戻り値

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

クエリ:

SELECT space(3);

結果:

┌─space(3) ────┐
│              │
└──────────────┘

reverse

文字列のバイトシーケンスを反転します。

reverseUTF8

文字列のUnicodeコードポイントのシーケンスを反転します。有効なUTF-8エンコードされたテキストを含んでいると仮定します。この仮定が破られた場合、例外はスローされず、結果は未定義となります。

concat

与えられた引数を連結します。

構文

concat(s1, s2, ...)

引数

任意の型の値。

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

戻り値

引数を連結して作成された文字列。

いずれかの引数が NULL の場合、関数は NULL を返します。

クエリ:

SELECT concat('Hello, ', 'World!');

結果:

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

クエリ:

SELECT concat(42, 144);

結果:

┌─concat(42, 144)─┐
│ 42144           │
└─────────────────┘
注記
|| 演算子

文字列連結には concat() の簡潔な代替として || 演算子を使用してください。例えば、'Hello, ' || 'World!'concat('Hello, ', 'World!') と同等です。

concatAssumeInjective

concat と同様ですが、concat(s1, s2, ...) → sn が単射であると仮定します。GROUP BY の最適化に使用できます。

関数が単射と呼ばれるのは、異なる引数に対して異なる結果を返すときです。言い換えれば: 異なる引数は決して同じ結果を生成しません。

構文

concatAssumeInjective(s1, s2, ...)

引数

String または FixedString 型の値。

戻り値

引数を連結して作成された文字列。

いずれかの引数が NULL の場合、関数は NULL を返します。

入力テーブル:

CREATE TABLE key_val(`key1` String, `key2` String, `value` UInt32) ENGINE = TinyLog;
INSERT INTO key_val VALUES ('Hello, ','World',1), ('Hello, ','World',2), ('Hello, ','World!',3), ('Hello',', World!',2);
SELECT * from key_val;
┌─key1────┬─key2─────┬─value─┐
│ Hello,  │ World    │     1 │
│ Hello,  │ World    │     2 │
│ Hello,  │ World!   │     3 │
│ Hello   │ , World! │     2 │
└─────────┴──────────┴───────┘
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

指定された区切り文字で与えられた文字列を連結します。

構文

concatWithSeparator(sep, expr1, expr2, expr3...)

エイリアス: concat_ws

引数

  • sep — 区切り文字。定数のStringまたはFixedString
  • exprN — 連結される表現。非StringまたはFixedString型の引数は、デフォルトのシリアル化を使用して文字列に変換されます。これによりパフォーマンスが低下するため、非 String/FixedString 引数の使用は推奨されません。

戻り値

引数を連結して作成された文字列。

いずれかの引数が NULL の場合、関数は NULL を返します。

SELECT concatWithSeparator('a', '1', '2', '3', '4')

結果:

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

concatWithSeparatorAssumeInjective

concatWithSeparator のようですが、concatWithSeparator(sep, expr1, expr2, expr3...) → result が単射であると仮定します。GROUP BYの最適化に使用できます。

関数が単射と呼ばれるのは、異なる引数に対して異なる結果を返すときです。言い換えれば: 異なる引数は決して同じ結果を生成しません。

substring

文字列 s の部分文字列を返します。部分文字列は指定されたバイトインデックス offset から始まります。バイトの数え方は1から始まります。もし offset が 0 の場合は、空の文字列が返されます。もし offset が負の数である場合、部分文字列は文字列の始まりではなく、文字列の終わりからpos文字の位置から始まります。オプションの引数 length では、返される部分文字列の最大バイト数を指定できます。

構文

substring(s, offset[, length])

エイリアス:

  • substr
  • mid
  • byteSlice

引数

  • s — 部分文字列を計算するための文字列。StringFixedString または Enum
  • offsets の部分文字列の開始位置。(U)Int*
  • length — 部分文字列の最大長。(U)Int*。オプション。

戻り値

インデックス offset から始まる s の部分文字列で、length バイト分です。String

SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1)

結果:

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

substringUTF8

文字列 s の部分文字列を返します。部分文字列は指定されたバイトインデックス offset で始まります。バイトの数え方は1から始まります。もし offset が 0 の場合は、空の文字列が返されます。もし offset が負の数である場合、部分文字列は文字列の終わりからpos文字の位置から始まります。オプションの引数 length では、返される部分文字列の最大バイト数を指定できます。

文字列が有効なUTF-8エンコードされたテキストを含んでいると仮定します。この仮定が破られた場合、例外はスローされず、結果は未定義となります。

構文

substringUTF8(s, offset[, length])

引数

  • s — 部分文字列を計算するための文字列。StringFixedString または Enum
  • offsets の部分文字列の開始位置。(U)Int*
  • length — 部分文字列の最大長。(U)Int*。オプション。

戻り値

インデックス offset から始まる s の部分文字列で、length バイト分です。

実装の詳細

文字列が有効なUTF-8エンコードされたテキストを含んでいると仮定します。この仮定が破られた場合、例外はスローされず、結果は未定義となります。

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

substringIndex

count 回のデリミタ delim の出現前の s の部分文字列を返します。これは、Spark または MySQL のように動作します。

構文

substringIndex(s, delim, count)

エイリアス: SUBSTRING_INDEX

引数

  • s — 部分文字列を抽出するための文字列。String
  • delim — スプリットする文字。String
  • count — 部分文字列を抽出する前に数えるデリミタの出現回数。countが正の場合は、最終のデリミタの左側のすべてを返します(左から数えて)。countが負の場合は、最終のデリミタの右側のすべてを返します(右から数えて)。UInt または Int

SELECT substringIndex('www.clickhouse.com', '.', 2)

結果:

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

substringIndexUTF8

count 回のデリミタ delim の出現前の s の部分文字列を返します。Unicodeコードポイント専用です。

文字列が有効なUTF-8エンコードされたテキストを含んでいると仮定します。この仮定が破られた場合、例外はスローされず、結果は未定義となります。

構文

substringIndexUTF8(s, delim, count)

引数

  • s — 部分文字列を抽出するための文字列。String
  • delim — スプリットする文字。String
  • count — 部分文字列を抽出する前に数えるデリミタの出現回数。countが正の場合は、最終のデリミタの左側のすべてを返します(左から数えて)。countが負の場合は、最終のデリミタの右側のすべてを返します(右から数えて)。UInt または Int

戻り値

delimcount 回の出現前の s の部分文字列。String

実装の詳細

文字列が有効なUTF-8エンコードされたテキストを含んでいると仮定します。この仮定が破られた場合、例外はスローされず、結果は未定義となります。

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

appendTrailingCharIfAbsent

文字列 s が非空であり、s が文字 c で終わっていない場合、c を文字列 s に追加します。

構文

appendTrailingCharIfAbsent(s, c)

convertCharset

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

構文

convertCharset(s, from, to)

base32Encode

stringを使用して文字列をエンコードします。

構文

base32Encode(plaintext)

引数

  • plaintextString 列または定数。

戻り値

  • 引数のエンコードされた値を含む文字列。String または FixedString

SELECT base32Encode('Encoded');

結果:

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

base32Decode

文字列を受け取り、Base32 エンコーディングを使用してそれをデコードします。

構文

base32Decode(encoded)

引数

  • encodedString または FixedString。文字列が有効なBase32エンコードされた値でない場合、例外がスローされます。

戻り値

  • 引数のデコードされた値を含む文字列。String

SELECT base32Decode('IVXGG33EMVSA====');

結果:

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

tryBase32Decode

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

構文

tryBase32Decode(encoded)

パラメータ

  • encoded: String または FixedString。文字列が有効なBase32エンコードされた値でない場合、エラーが発生したときに空の文字列を返します。

戻り値

  • 引数のデコードされた値を含む文字列。

クエリ:

SELECT tryBase32Decode('IVXGG33EMVSA====') as res, tryBase32Decode('invalid') as res_invalid;
┌─res─────┬─res_invalid─┐
│ Encoded │             │
└─────────┴─────────────┘

base58Encode

Base58 を使用して文字列をエンコードします。"Bitcoin" アルファベットを使用します。

構文

base58Encode(plaintext)

引数

  • plaintextString 列または定数。

戻り値

  • 引数のエンコードされた値を含む文字列。String または FixedString

SELECT base58Encode('Encoded');

結果:

┌─base58Encode('Encoded')─┐
│ 3dc8KtHrwM              │
└─────────────────────────┘

base58Decode

文字列を受け取り、Base58 エンコーディング方式を使用してデコードします。"Bitcoin" アルファベットを使用します。

構文

base58Decode(encoded)

引数

  • encodedString または FixedString。文字列が有効な Base58 エンコード値でない場合、例外がスローされます。

返される値

  • 引数のデコード値を含む文字列。String

SELECT base58Decode('3dc8KtHrwM');

結果:

┌─base58Decode('3dc8KtHrwM')─┐
│ Encoded                    │
└────────────────────────────┘

tryBase58Decode

base58Decode のように動作しますが、エラーが発生した場合は空の文字列を返します。

構文

tryBase58Decode(encoded)

引数

  • encoded: String または FixedString。文字列が有効な Base58 エンコード値でない場合、エラー時に空の文字列を返します。

返される値

  • 引数のデコード値を含む文字列。

クエリ:

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

base64Encode

文字列または FixedString を base64 でエンコードします。RFC 4648 に従います。

エイリアス: TO_BASE64

構文

base64Encode(plaintext)

引数

  • plaintextString カラムまたは定数。

返される値

  • 引数のエンコード値を含む文字列。

SELECT base64Encode('clickhouse');

結果:

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

base64URLEncode

URL(String または FixedString)を、URL 特有の修正を行った base64 でエンコードします。RFC 4648 に従います。

構文

base64URLEncode(url)

引数

  • urlString カラムまたは定数。

返される値

  • 引数のエンコード値を含む文字列。

SELECT base64URLEncode('https://clickhouse.com');

結果:

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

base64Decode

文字列を受け取り、base64 からデコードします。RFC 4648 に従い、エラーの場合は例外をスローします。

エイリアス: FROM_BASE64

構文

base64Decode(encoded)

引数

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

返される値

  • 引数のデコード値を含む文字列。

SELECT base64Decode('Y2xpY2tob3VzZQ==');

結果:

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

base64URLDecode

base64 でエンコードされた URL を受け取り、URL 特有の修正を行った state からデコードします。RFC 4648 に従い、エラーの場合は例外をスローします。

構文

base64URLDecode(encodedUrl)

引数

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

返される値

  • 引数のデコード値を含む文字列。

SELECT base64URLDecode('aHR0cDovL2NsaWNraG91c2UuY29t');

結果:

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

tryBase64Decode

base64Decode のように動作しますが、エラーが発生した場合は空の文字列を返します。

構文

tryBase64Decode(encoded)

引数

  • encodedString カラムまたは定数。文字列が有効な Base64 エンコード値でない場合、空の文字列を返します。

返される値

  • 引数のデコード値を含む文字列。

クエリ:

SELECT tryBase64Decode('RW5jb2RlZA==') as res, tryBase64Decode('invalid') as res_invalid;
┌─res────────┬─res_invalid─┐
│ clickhouse │             │
└────────────┴─────────────┘

tryBase64URLDecode

base64URLDecode のように動作しますが、エラーが発生した場合は空の文字列を返します。

構文

tryBase64URLDecode(encodedUrl)

引数

  • encodedURLString カラムまたは定数。文字列が有効な Base64 エンコード値でない場合、空の文字列を返します。

返される値

  • 引数のデコード値を含む文字列。

クエリ:

SELECT tryBase64URLDecode('aHR0cDovL2NsaWNraG91c2UuY29t') as res, tryBase64Decode('aHR0cHM6Ly9jbGlja') as res_invalid;
┌─res────────────────────┬─res_invalid─┐
│ https://clickhouse.com │             │
└────────────────────────┴─────────────┘

endsWith

文字列 strsuffix で終わるかどうかを返します。

構文

endsWith(str, suffix)

endsWithUTF8

文字列 strsuffix で終わるかどうかを返します。endsWithUTF8endsWith の違いは、endsWithUTF8 が UTF-8 文字によって strsuffix をマッチングさせることです。

構文

endsWithUTF8(str, suffix)

SELECT endsWithUTF8('中国', '\xbd'), endsWith('中国', '\xbd')

結果:

┌─endsWithUTF8('中国', '½')─┬─endsWith('中国', '½')─┐
│                        0 │                    1 │
└──────────────────────────┴──────────────────────┘

startsWith

文字列 strprefix で始まるかどうかを返します。

構文

startsWith(str, prefix)

SELECT startsWith('Spider-Man', 'Spi');

startsWithUTF8

Available in version 23.8 and later

文字列 strprefix で始まるかどうかを返します。startsWithUTF8startsWith の違いは、startsWithUTF8 が UTF-8 文字によって strsuffix をマッチングさせることです。

SELECT startsWithUTF8('中国', '\xe4'), startsWith('中国', '\xe4')

結果:

┌─startsWithUTF8('中国', '⥩─┬─startsWith('中国', '⥩─┐
│                          0 │                      1 │
└────────────────────────────┴────────────────────────┘

trim

指定された文字を文字列の先頭または末尾から削除します。特に指定されていない場合、関数は空白(ASCII 文字 32)を削除します。

構文

trim([[LEADING|TRAILING|BOTH] trim_character FROM] input_string)

引数

  • trim_character — 削除する文字。String
  • input_string — トリムする文字列。String

返される値

先頭および/または末尾の指定された文字がない文字列。String

SELECT trim(BOTH ' ()' FROM '(   Hello, world!   )');

結果:

┌─trim(BOTH ' ()' FROM '(   Hello, world!   )')─┐
│ Hello, world!                                 │
└───────────────────────────────────────────────┘

trimLeft

文字列の先頭から空白(ASCII 文字 32)の連続する発生を削除します。

構文

trimLeft(input_string[, trim_characters])

エイリアス: ltrim

引数

  • input_string — トリムする文字列。String
  • trim_characters — 削除する文字。省略可能。String。指定されていない場合、' '(単一の空白)がトリム文字として使用されます。

返される値

先頭に共通の空白がない文字列。String

SELECT trimLeft('     Hello, world!     ');

結果:

┌─trimLeft('     Hello, world!     ')─┐
│ Hello, world!                       │
└─────────────────────────────────────┘

trimRight

文字列の末尾から空白(ASCII 文字 32)の連続する発生を削除します。

構文

trimRight(input_string[, trim_characters])

エイリアス: rtrim

引数

  • input_string — トリムする文字列。String
  • trim_characters — 削除する文字。省略可能。String。指定されていない場合、' '(単一の空白)がトリム文字として使用されます。

返される値

末尾に共通の空白がない文字列。String

SELECT trimRight('     Hello, world!     ');

結果:

┌─trimRight('     Hello, world!     ')─┐
│      Hello, world!                   │
└──────────────────────────────────────┘

trimBoth

文字列の両端から空白(ASCII 文字 32)の連続する発生を削除します。

構文

trimBoth(input_string[, trim_characters])

エイリアス: trim

引数

  • input_string — トリムする文字列。String
  • trim_characters — 削除する文字。省略可能。String。指定されていない場合、' '(単一の空白)がトリム文字として使用されます。

返される値

先頭と末尾に共通の空白がない文字列。String

SELECT trimBoth('     Hello, world!     ');

結果:

┌─trimBoth('     Hello, world!     ')─┐
│ Hello, world!                       │
└─────────────────────────────────────┘

CRC32

文字列の CRC32 チェックサムを返します。CRC-32-IEEE 802.3 多項式と初期値 0xffffffff (zlib 実装)を使用します。

結果の型は UInt32 です。

CRC32IEEE

文字列の CRC32 チェックサムを返します。CRC-32-IEEE 802.3 多項式を使用します。

結果の型は UInt32 です。

CRC64

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

結果の型は UInt64 です。

normalizeUTF8NFC

文字列を NFC 正規化形式 に変換し、文字列が有効な UTF8 エンコードのテキストであると仮定します。

構文

normalizeUTF8NFC(words)

引数

  • words — UTF8 エンコードの入力文字列。String

返される値

  • NFC 正規化形式に変換された文字列。String

SELECT length('â'), normalizeUTF8NFC('â') AS nfc, length(nfc) AS nfc_len;

結果:

┌─length('â')─┬─nfc─┬─nfc_len─┐
│           2 │ â   │       2 │
└─────────────┴─────┴─────────┘

normalizeUTF8NFD

文字列を NFD 正規化形式 に変換し、文字列が有効な UTF8 エンコードのテキストであると仮定します。

構文

normalizeUTF8NFD(words)

引数

  • words — UTF8 エンコードの入力文字列。String

返される値

  • NFD 正規化形式に変換された文字列。String

SELECT length('â'), normalizeUTF8NFD('â') AS nfd, length(nfd) AS nfd_len;

結果:

┌─length('â')─┬─nfd─┬─nfd_len─┐
│           2 │ â   │       3 │
└─────────────┴─────┴─────────┘

normalizeUTF8NFKC

文字列を NFKC 正規化形式 に変換し、文字列が有効な UTF8 エンコードのテキストであると仮定します。

構文

normalizeUTF8NFKC(words)

引数

  • words — UTF8 エンコードの入力文字列。String

返される値

  • NFKC 正規化形式に変換された文字列。String

SELECT length('â'), normalizeUTF8NFKC('â') AS nfkc, length(nfkc) AS nfkc_len;

結果:

┌─length('â')─┬─nfkc─┬─nfkc_len─┐
│           2 │ â    │        2 │
└─────────────┴──────┴──────────┘

normalizeUTF8NFKD

文字列を NFKD 正規化形式 に変換し、文字列が有効な UTF8 エンコードのテキストであると仮定します。

構文

normalizeUTF8NFKD(words)

引数

  • words — UTF8 エンコードの入力文字列。String

返される値

  • NFKD 正規化形式に変換された文字列。String

SELECT length('â'), normalizeUTF8NFKD('â') AS nfkd, length(nfkd) AS nfkd_len;

結果:

┌─length('â')─┬─nfkd─┬─nfkd_len─┐
│           2 │ â    │        3 │
└─────────────┴──────┴──────────┘

encodeXMLComponent

XML 内で特別な意味を持つ文字をエスケープし、その後 XML テキストノードまたは属性に配置できるようにします。

置き換えられる文字は以下の通りです: <, &, >, ", 'XML と HTML の文字エンティティ参照のリスト も参照してください。

構文

encodeXMLComponent(x)

引数

  • x — 入力文字列。String

返される値

  • エスケープされた文字列。String

SELECT encodeXMLComponent('Hello, "world"!');
SELECT encodeXMLComponent('<123>');
SELECT encodeXMLComponent('&clickhouse');
SELECT encodeXMLComponent('\'foo\'');

結果:

Hello, &quot;world&quot;!
&lt;123&gt;
&amp;clickhouse
&apos;foo&apos;

decodeXMLComponent

XML 内で特別な意味を持つ部分文字列のエスケープを解除します。これらの部分文字列は: &quot; &amp; &apos; &gt; &lt;

この関数は、数値文字参照を Unicode 文字に置き換えます。両方の十進法(例えば &#10003;)および16進数(例えば &#x2713;)形式がサポートされています。

構文

decodeXMLComponent(x)

引数

  • x — 入力文字列。String

返される値

  • エスケープ解除された文字列。String

SELECT decodeXMLComponent('&apos;foo&apos;');
SELECT decodeXMLComponent('&lt; &#x3A3; &gt;');

結果:

'foo'
< Σ >

decodeHTMLComponent

HTML 内で特別な意味を持つ部分文字列のエスケープを解除します。例えば: &hbar; &gt; &diamondsuit; &heartsuit; &lt; など。

この関数は、数値文字参照を Unicode 文字に置き換えます。両方の十進法(例えば &#10003;)および16進数(例えば &#x2713;)形式がサポートされています。

構文

decodeHTMLComponent(x)

引数

  • x — 入力文字列。String

返される値

  • エスケープ解除された文字列。String

SELECT decodeHTMLComponent(''CH');
SELECT decodeHTMLComponent('I&heartsuit;ClickHouse');

結果:

'CH'
I♥ClickHouse'

extractTextFromHTML

この関数は、HTML または XHTML からプレーンテキストを抽出します。

完全には HTML、XML、または XHTML の仕様に準拠していませんが、実装は合理的に正確かつ高速です。ルールは以下の通りです:

  1. コメントはスキップされます。例: <!-- test -->。コメントは --> で終わる必要があります。ネストされたコメントは許可されません。 ノート: <!--> および <!---> のような構文は HTML では有効なコメントではありませんが、他のルールによってスキップされます。
  2. CDATA はそのまま貼り付けられます。ノート: CDATA は XML/XHTML 特有であり、「ベストエフォート」ベースで処理されます。
  3. script および style 要素は、その全コンテンツを削除します。ノート: 閉じタグはコンテンツ内に表示されないと仮定されます。例えば、JS 文字列リテラルでは "<\/script>" のようにエスケープする必要があります。 ノート: コメントや CDATA は script または style 内で可能ですが、その中では閉じタグは見つかりません。例: <script><![CDATA[</script>]]></script>。しかし、コメント内ではまだ検索されます。時には複雑になる場合があります: <script>var x = "<!--"; </script> var y = "-->"; alert(x + y);</script> ノート: script および style が XML 名前空間の名前である場合、それらは通常の script または style 要素のように扱われません。例: <script:a>Hello</script:a>。 ノート: 閉じタグ名の後には空白があることが可能ですが、前にはありません: </script > ですが < / script> は無効です。
  4. 他のタグまたはタグのような要素は、内部コンテンツがない限りスキップされます。例: <a>.</a> ノート: この HTML は不正なものと予想されています: <a test=">"></a> ノート: <>, <!> など、タグのようなものもスキップされます。 ノート: 終わりがないタグは入力の終わりまでスキップされます: <hello
  5. HTML および XML エンティティはデコードされません。エンティティは別の関数で処理する必要があります。
  6. テキスト内の空白は、特定のルールによって圧縮または挿入されます。
    • 先頭および末尾の空白が削除されます。
    • 連続する空白は圧縮されます。
    • ただし、テキストが他の要素によって区切られており、空白がない場合は、空白が挿入されます。
    • 不自然な場合が生じる可能性があります: Hello<b>world</b>, Hello<!-- -->world - HTML には空白がありませんが、関数はそれを挿入します。また、Hello<p>world</p>, Hello<br>world も考慮してください。この行動は、データ分析において合理的です。例えば、HTML を単語のバガーに変換するため。
  7. 空白を適切に処理するには、<pre></pre> および CSS の display および white-space プロパティのサポートが必要です。

構文

extractTextFromHTML(x)

引数

  • x — 入力テキスト。String

返される値

  • 抽出されたテキスト。String

最初の例は、いくつかのタグとコメントを含んでおり、空白の処理も示しています。 2 番目の例は、CDATA およびスクリプトタグの処理を示しています。 3 番目の例では、url 関数によって受信したフル HTML レスポンスからテキストが抽出されています。

SELECT extractTextFromHTML(' <p> A text <i>with</i><b>tags</b>. <!-- comments --> </p> ');
SELECT extractTextFromHTML('<![CDATA[The content within <b>CDATA</b>]]> <script>alert("Script");</script>');
SELECT extractTextFromHTML(html) FROM url('http://www.donothingfor2minutes.com/', RawBLOB, 'html String');

結果:

A text with tags .
The content within <b>CDATA</b>
Do Nothing for 2 Minutes 2:00 &nbsp;

ascii

文字列 s の最初の文字の ASCII コードポイント(Int32 として)を返します。

s が空である場合、結果は 0 です。最初の文字が ASCII 文字でない場合、または UTF-16 の Latin-1 サプリメント範囲に含まれていない場合、結果は未定義です。

構文

ascii(s)

soundex

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

構文

soundex(val)

引数

返される値

  • 入力値の Soundex コード。String

select soundex('aksel');

結果:

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

punycodeEncode

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

構文

punycodeEncode(val)

引数

返される値

  • 入力値の Punycode 表現。String

select punycodeEncode('München');

結果:

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

punycodeDecode

Punycode エンコードされた文字列の UTF8 エンコードされたプレーンテキストを返します。 有効な Punycode エンコード文字列が与えられない場合、例外がスローされます。

構文

punycodeEncode(val)

引数

  • val — Punycode エンコード文字列。String

返される値

  • 入力値のプレーンテキスト。String

select punycodeDecode('Mnchen-3ya');

結果:

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

tryPunycodeDecode

punycodeDecode のように動作しますが、有効な Punycode エンコード文字列が与えられない場合は空の文字列を返します。

idnaEncode

国際化ドメイン名のアプリケーションにおける国際化 (IDNA) メカニズムに従って、ドメイン名の ASCII 表現(ToASCII アルゴリズム)を返します。 入力文字列は UTF エンコードされ、ASCII 文字列に変換可能である必要があります。そうでない場合、例外がスローされます。 ノート: パーセントデコーディングやタブ、スペース、制御文字のトリミングは実行されません。

構文

idnaEncode(val)

引数

返される値

  • IDNA メカニズムに従った入力値の ASCII 表現。String

select idnaEncode('straße.münchen.de');

結果:

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

tryIdnaEncode

idnaEncode のように動作しますが、エラーが発生した場合は例外をスローするのではなく、空の文字列を返します。

idnaDecode

国際化ドメイン名のアプリケーションにおける国際化 (IDNA) メカニズムに従い、ドメイン名の Unicode(UTF-8)表現(ToUnicode アルゴリズム)を返します。 エラーが発生した場合(例えば、入力が無効な場合)、入力文字列が返されます。 idnaEncode()idnaDecode() の反復適用は、ケース正規化のため、元の文字列を必ずしも返すわけではありません。

構文

idnaDecode(val)

引数

返される値

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

byteHammingDistance

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

構文

byteHammingDistance(string1, string2)

SELECT byteHammingDistance('karolin', 'kathrin');

結果:

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

エイリアス: mismatches

stringJaccardIndex

二つのバイト文字列間の ジャカード類似度指数 を計算します。

構文

stringJaccardIndex(string1, string2)

SELECT stringJaccardIndex('clickhouse', 'mouse');

結果:

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

stringJaccardIndexUTF8

stringJaccardIndex と同様ですが、UTF8 エンコードの文字列に対して使用します。

editDistance

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

構文

editDistance(string1, string2)

SELECT editDistance('clickhouse', 'mouse');

結果:

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

エイリアス: levenshteinDistance

editDistanceUTF8

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

構文

editDistanceUTF8(string1, string2)

SELECT editDistanceUTF8('我是谁', '我是我');

結果:

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

エイリアス: levenshteinDistanceUTF8

damerauLevenshteinDistance

二つのバイト文字列間の ダメラウ・レヴィンシュタイン距離 を計算します。

構文

damerauLevenshteinDistance(string1, string2)

SELECT damerauLevenshteinDistance('clickhouse', 'mouse');

結果:

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

jaroSimilarity

二つのバイト文字列間の ジャロ類似度 を計算します。

構文

jaroSimilarity(string1, string2)

SELECT jaroSimilarity('clickhouse', 'click');

結果:

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

jaroWinklerSimilarity

二つのバイト文字列間の ジャロ・ウィンクラー類似度 を計算します。

構文

jaroWinklerSimilarity(string1, string2)

SELECT jaroWinklerSimilarity('clickhouse', 'click');

結果:

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

initcap

各単語の最初の文字を大文字にし、残りを小文字に変換します。単語は、非英数字の文字で区切られた英数字の文字の連続です。

注記

initCap は各単語の最初の文字のみを大文字に変換するため、アポストロフィや大文字を含む単語に対して予期しない動作が見られることがあります。例えば:

SELECT initCap('mother''s daughter'), initCap('joe McAdam');

は次を返します:

┌─initCap('mother\'s daughter')─┬─initCap('joe McAdam')─┐
│ Mother'S Daughter             │ Joe Mcadam            │
└───────────────────────────────┴───────────────────────┘

これは既知の動作であり、現在修正する予定はありません。

構文

initcap(val)

引数

  • val — 入力値。String

返される値

  • 各単語の最初の文字が大文字に変換された valString

クエリ:

SELECT initcap('building for fast');

結果:

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

initcapUTF8

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

注記

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

構文

initcapUTF8(val)

引数

  • val — 入力値。String

返される値

  • 各単語の最初の文字が大文字に変換された valString

クエリ:

SELECT initcapUTF8('не тормозит');

結果:

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

firstLine

複数行の文字列から最初の行を返します。

構文

firstLine(val)

引数

返される値

  • 行区切りがない場合、入力値全体を返すか、入力値の最初の行。String

select firstLine('foo\nbar\nbaz');

結果:

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

stringCompare

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

構文

stringCompare(string1, string2[, str1_off, string2_offset, num_bytes]);

引数

  • string1 — 比較する最初の文字列。String
  • string2 - 比較する2番目の文字列。String
  • string1_offset — 文字列 string1 の比較を開始する位置(ゼロベース)。オプション、正の数。
  • string2_offset — 文字列 string2 の比較を開始する位置(ゼロベース)。オプション、正の数。
  • num_bytes — 両方の文字列で比較する最大バイト数。 string_offset + num_bytes が入力文字列の終わりを超える場合、num_bytes はそれに応じて減少します。

返される値

  • -1 — string1[string1_offset: string1_offset + num_bytes] < string2[string2_offset:string2_offset + num_bytes] であり、かつ string1_offset < len(string1) および string2_offset < len(string2) の場合。 もし string1_offset >= len(string1) かつ string2_offset < len(string2) の場合。
  • 0 — string1[string1_offset: string1_offset + num_bytes] = string2[string2_offset:string2_offset + num_bytes] であり、かつ string1_offset < len(string1) および string2_offset < len(string2) の場合。 もし string1_offset >= len(string1) かつ string2_offset >= len(string2) の場合。
  • 1 — string1[string1_offset: string1_offset + num_bytes] > string2[string2_offset:string2_offset + num_bytes] であり、かつ string1_offset < len(string1) および string2_offset < len(string2) の場合。 もし string1_offset < len(string1) かつ string2_offset >= len(string2) の場合。

SELECT
    stringCompare('alice', 'bob', 0, 0, 3) as result1,
    stringCompare('alice', 'alicia', 0, 0, 3) as result2,
    stringCompare('bob', 'alice', 0, 0, 3) as result3

結果:

   ┌─result1─┬─result2─┬─result3─┐
1. │      -1 │       0 │       1 │
   └─────────┴─────────┴─────────┘
SELECT
    stringCompare('alice', 'alicia') as result2,
    stringCompare('alice', 'alice') as result1,
    stringCompare('bob', 'alice') as result3

結果:

   ┌─result2─┬─result1─┬─result3─┐
1. │      -1 │       0 │       1 │
   └─────────┴─────────┴─────────┘

sparseGrams

与えられた文字列のすべての部分文字列を見つけます。部分文字列の長さは少なくとも n であり、部分文字列の境界にある (n-1)-グラムのハッシュが、部分文字列の内部にあるいかなる (n-1)-グラムよりも厳密に大きい場合です。 crc32 をハッシュ関数として使用します。

構文

sparseGrams(s[, min_ngram_length]);

引数

  • s — 入力文字列。String
  • min_ngram_length — 抽出される ngram の最小長さ。デフォルトおよび最小値は 3 です。
  • max_ngram_length — 抽出される ngram の最大長さ。デフォルト値は 100 です。「min_ngram_length」未満であってはいけません。

返される値

  • 選択された部分文字列の配列。Array(String)。

SELECT sparseGrams('alice', 3) AS result

結果:

   ┌─result─────────────────────┐
1. │ ['ali','lic','lice','ice'] │
   └────────────────────────────┘

sparseGramsUTF8

与えられた文字列のすべての部分文字列を見つけます。部分文字列の長さは少なくとも n であり、部分文字列の境界にある (n-1)-グラムのハッシュが、部分文字列の内部にあるいかなる (n-1)-グラムよりも厳密に大きい場合です。 crc32 をハッシュ関数として使用します。 UTF-8文字列を期待し、無効なUTF-8シーケンスの場合は例外をスローします。

構文

sparseGramsUTF8(s[, min_ngram_length]);

引数

  • s — 入力文字列。String
  • min_ngram_length — 抽出される ngram の最小長さ。デフォルトおよび最小値は 3 です。
  • max_ngram_length — 抽出される ngram の最大長さ。デフォルト値は 100 です。「min_ngram_length」未満であってはいけません。

返される値

  • 選択された部分文字列の配列。Array(String)。

SELECT sparseGramsUTF8('алиса', 3) AS result

結果:

   ┌─result──────────────┐
1. │ ['али','лис','иса'] │
   └─────────────────────┘

sparseGramsHashes

与えられた文字列のすべての部分文字列のハッシュを見つけます。部分文字列の長さは少なくとも n であり、部分文字列の境界にある (n-1)-グラムのハッシュが、部分文字列の内部にあるいかなる (n-1)-グラムよりも厳密に大きい場合です。 crc32 をハッシュ関数として使用します。

構文

sparseGramsHashes(s[, min_ngram_length]);

引数

  • s — 入力文字列。String
  • min_ngram_length — 抽出される ngram の最小長さ。デフォルトおよび最小値は 3 です。
  • max_ngram_length — 抽出される ngram の最大長さ。デフォルト値は 100 です。「min_ngram_length」未満であってはいけません。

返される値

  • 選択された部分文字列 crc32-c ハッシュの配列。Array(UInt32)。

SELECT sparseGramsHashes('alice', 3) AS result

結果:

   ┌─result────────────────────────────────────────┐
1. │ [1265796434,3725069146,1689963195,3410985998] │
   └───────────────────────────────────────────────┘

sparseGramsHashesUTF8

与えられた文字列のすべての部分文字列のハッシュを見つけます。部分文字列の長さは少なくとも n であり、部分文字列の境界にある (n-1)-グラムのハッシュが、部分文字列の内部にあるいかなる (n-1)-グラムよりも厳密に大きい場合です。 crc32 をハッシュ関数として使用します。 UTF-8文字列を期待し、無効なUTF-8シーケンスの場合は例外をスローします。

構文

sparseGramsHashesUTF8(s[, min_ngram_length]);

引数

  • s — 入力文字列。String
  • min_ngram_length — 抽出される ngram の最小長さ。デフォルトおよび最小値は 3 です。
  • max_ngram_length — 抽出される ngram の最大長さ。デフォルト値は 100 です。「min_ngram_length」未満であってはいけません。

返される値

  • 選択された部分文字列 crc32-c ハッシュの配列。Array(UInt32)。

SELECT sparseGramsHashesUTF8('алиса', 3) AS result

結果:

   ┌─result───────────────────────────┐
1. │ [417784657,728683856,3071092609] │
   └──────────────────────────────────┘

stringBytesUniq

文字列内の異なるバイトの数をカウントします。

構文

stringBytesUniq(s)

引数

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

返される値

  • 文字列内の異なるバイトの数。UInt16

SELECT stringBytesUniq('Hello');

結果:

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

stringBytesEntropy

文字列内のバイト分布のシャノンエントロピーを計算します。

構文

stringBytesEntropy(s)

引数

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

返される値

  • 文字列内のバイト分布のシャノンエントロピー。Float64

SELECT stringBytesEntropy('Hello, world!');

結果:

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