ClickHouse/docs/ja/sql-reference/functions/string-functions.md
2024-11-18 11:58:58 +09:00

67 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/sql-reference/functions/string-functions 170 Strings

import VersionBadge from '@theme/badges/VersionBadge';

文字列を操作するための関数

文字列の検索置換の関数は別途説明されています。

empty

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

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

構文

empty(x)

引数

返される値

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

SELECT empty('');

結果:

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

notEmpty

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

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

構文

notEmpty(x)

引数

返される値

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

SELECT notEmpty('text');

結果:

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

length

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

別名: OCTET_LENGTH

構文

length(s)

パラメータ

返される値

  • 文字列または配列 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

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

構文

left(s, offset)

パラメータ

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

返される値

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

クエリ:

SELECT left('Hello', 3);

結果:

Hel

クエリ:

SELECT left('Hello', -3);

結果:

He

leftUTF8

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

構文

leftUTF8(s, offset)

パラメータ

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

返される値

  • 正の 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

UTF-8文字列を左からスペースまたは指定した文字列で埋めます必要であれば複数回、結果の文字列が指定した長さに達するまで。文字列の長さはバイトではなくコードポイントで測定されます。

構文

leftPadUTF8(string, length[, pad_string])

引数

  • string — 埋めるべき入力文字列。String.
  • length — 結果の文字列の長さ。UInt または Int。入力文字列の長さよりも小さい場合、入力文字列は length 文字に短縮されます。
  • pad_string — 入力文字列を埋めるための文字列。String. オプション。指定しない場合、入力文字列はスペースで埋められます。

返される値

  • 指定された長さの左寄せされた文字列。String.

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

結果:

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

right

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

構文

right(s, offset)

パラメータ

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

返される値

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

クエリ:

SELECT right('Hello', 3);

結果:

llo

クエリ:

SELECT right('Hello', -3);

結果:

lo

rightUTF8

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

構文

rightUTF8(s, offset)

パラメータ

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

返される値

  • 正の 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

UTF-8文字列を右からスペースまたは指定した文字列で埋めます必要であれば複数回、結果の文字列が指定した長さに達するまで。文字列の長さはバイトではなくコードポイントで測定されます。

構文

rightPadUTF8(string, length[, pad_string])

引数

  • string — 埋めるべき入力文字列。String.
  • length — 結果の文字列の長さ。UInt または Int。入力文字列の長さよりも小さい場合、入力文字列は length 文字に短縮されます。
  • pad_string — 入力文字列を埋めるための文字列。String. オプション。指定しない場合、入力文字列はスペースで埋められます。

返される値

  • 指定され長さの絵文字列。String.

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

結果:

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

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エンコードされたテキストを含むと仮定しています。この仮定が誤っている場合、例外はスローされず、結果は未定義です。

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

構文

lowerUTF8(input)

パラメータ

  • input — 文字列のタイプ String

返される値

  • String データタイプの値。

クエリ:

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

結果:

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

upperUTF8

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

:::note 言語を検出しません。たとえば、トルコ語の場合、結果は完全に正確ではない可能性があります (i/İ vs. 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文字を <EFBFBD> (U+FFFD) 文字に置き換えます。連続する無効な文字は、1つの置換文字にまとめられます。

構文

toValidUTF8(input_string)

引数

  • input_string — バイトセットとして表現されたStringデータタイプのオブジェクト。

返される値

  • 有効なUTF-8文字列。

SELECT toValidUTF8('\x61\xF0\x80\x80\x80b');
┌─toValidUTF8('a<><61><EFBFBD><EFBFBD>b')─┐
│ a<>b                   │
└───────────────────────┘

repeat

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

構文

repeat(s, n)

別名: REPEAT

引数

返される値

n 回繰り返された文字列 s を含む文字列。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           │
└─────────────────┘

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

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

構文

substring(s, offset[, length])

別名:

  • substr
  • mid
  • byteSlice

引数

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

返される値

offset の位置から始まる 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

指定されたバイトインデックス offset に基づいてUnicodeコードポイントの文字列 s の部分文字列を返します。バイトカウントは 1 から始まります。offset0 の場合、空文字列を返します。offset が負の場合、文字列の始めからではなく、文字列の終わりから pos 文字から始まります。オプションの引数 length は、返される部分文字列の最大バイト数を指定します。

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

構文

substringUTF8(s, offset[, length])

引数

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

返される値

offset の位置から始まる 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

SparkまたはMySQLのように、delimcount 回の出現の前の s の部分文字列を返します。

構文

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

Unicodeコードポイント専用に、delimcount 回の出現の前の s の部分文字列を返します。

文字列が有効な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 が空でなく、文字 c で終わらない場合、文字 c を末尾に追加します。

構文

appendTrailingCharIfAbsent(s, c)

convertCharset

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

構文

convertCharset(s, from, to)

base58Encode

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

構文

base58Encode(plaintext)

引数

  • plaintextString カラムまたは定数。

返される値

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

SELECT base58Encode('Encoded');

結果:

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

base58Decode

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

構文

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

String または FixedStringRFC 4648 に従ってbase64でエンコードします。

別名: TO_BASE64.

構文

base64Encode(plaintext)

引数

  • plaintextString カラムまたは定数。

返される値

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

SELECT base64Encode('clickhouse');

結果:

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

base64URLEncode

RFC 4648に従って、URL (String または FixedString) をURL専用の変更でbase64でエンコードします。

構文

base64URLEncode(url)

引数

  • urlString カラムまたは定数。

返される値

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

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

結果:

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

base64Decode

RFC 4648に従い、Stringをbase64からデコードします。エラーの場合は例外がスローされます。

別名: FROM_BASE64.

構文

base64Decode(encoded)

引数

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

返される値

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

SELECT base64Decode('Y2xpY2tob3VzZQ==');

結果:

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

base64URLDecode

RFC 4648に従い、URL専用の変更を伴うbase64からURLをデコードします。エラーの場合は例外がスローされます。

構文

base64URLDecode(encodedUrl)

引数

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

返される値

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

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でエンコードされた、URL専用の変更を伴う値でない場合、空の文字列を返します。

返される値

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

クエリ:

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

endsWith

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

構文

endsWith(str, suffix)

endsWithUTF8

文字列 strsuffix で終わるかを返します。endsWithUTF8endsWith の違いは、endsWithUTF8strsuffix をUTF-8文字で一致させることです。

構文

endsWithUTF8(str, suffix)

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

結果:

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

startsWith

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

構文

startsWith(str, prefix)

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

startsWithUTF8

文字列 strprefix で始まるかどうかを返します。startsWithUTF8startsWith の違いは、startsWithUTF8strsuffix をUTF-8文字で一致させることです。

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)

別名: ltrim(input_string).

引数

  • input_string — トリムする文字列。String.

返される値

先頭の一般的なホワイトスペースがない文字列。String.

SELECT trimLeft('     Hello, world!     ');

結果:

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

trimRight

文字列の終わりから連続するホワイトスペース (ASCII文字32) を削除します。

構文

trimRight(input_string)

別名: rtrim(input_string).

引数

  • input_string — トリムする文字列。String.

返される値

末尾の一般的なホワイトスペースがない文字列。String.

SELECT trimRight('     Hello, world!     ');

結果:

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

trimBoth

文字列の両端から連続するホワイトスペース (ASCII文字32) を削除します。

構文

trimBoth(input_string)

別名: trim(input_string).

引数

  • input_string — トリムする文字列。String.

返される値

先頭および末尾の一般的なホワイトスペースがない文字列。String.

SELECT trimBoth('     Hello, world!     ');

結果:

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

CRC32

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

結果の型は UInt32 です。

CRC32IEEE

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

結果の型は UInt32 です。

CRC64

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

結果の型は UInt64 です。

normalizeQuery

リテラル、リテラルの連続、複雑なエイリアスホワイトスペースを含むもの、2桁以上または36バイト以上の長さのものであるUUIDなどをプレースホルダー ? に置き換えます。

構文

normalizeQuery(x)

引数

  • x — 文字のシーケンス。String.

返される値

  • プレースホルダーを持つ文字のシーケンス。String.

クエリ:

SELECT normalizeQuery('[1, 2, 3, x]') AS query;

結果:

┌─query────┐
│ [?.., x] │
└──────────┘

normalizeQueryKeepNames

リテラル、リテラルの連続をプレースホルダー ? に置き換えますが、複雑なエイリアスホワイトスペースを含むもの、2桁以上または36バイト以上のもの、例えばUUIDは置き換えません。これにより、複雑なクエリログをより良く分析できます。

構文

normalizeQueryKeepNames(x)

引数

  • x — 文字のシーケンス。String.

返される値

  • プレースホルダーを持つ文字のシーケンス。String.

クエリ:

SELECT normalizeQuery('SELECT 1 AS aComplexName123'), normalizeQueryKeepNames('SELECT 1 AS aComplexName123');

結果:

┌─normalizeQuery('SELECT 1 AS aComplexName123')─┬─normalizeQueryKeepNames('SELECT 1 AS aComplexName123')─┐
│ SELECT ? AS `?`                               │ SELECT ? AS aComplexName123                            │
└───────────────────────────────────────────────┴────────────────────────────────────────────────────────┘

normalizedQueryHash

リテラルの値を持たない、類似したクエリの同じ64ビットのハッシュ値を返します。クエリログを分析するのに役立ちます。

構文

normalizedQueryHash(x)

引数

  • x — 文字のシーケンス。String.

返される値

クエリ:

SELECT normalizedQueryHash('SELECT 1 AS `xyz`') != normalizedQueryHash('SELECT 1 AS `abc`') AS res;

結果:

┌─res─┐
│   1 │
└─────┘

normalizedQueryHashKeepNames

normalizedQueryHash のようですが、複雑なエイリアスホワイトスペースを含む、2桁以上あるいは36バイト以上のもの、例えばUUIDを置き換えずに同じ64ビットのハッシュ値を返します。クエリログを分析するのに役立ちます。

構文

normalizedQueryHashKeepNames(x)

引数

  • x — 文字のシーケンス。String.

返される値

SELECT normalizedQueryHash('SELECT 1 AS `xyz123`') != normalizedQueryHash('SELECT 1 AS `abc123`') AS normalizedQueryHash;
SELECT normalizedQueryHashKeepNames('SELECT 1 AS `xyz123`') != normalizedQueryHashKeepNames('SELECT 1 AS `abc123`') AS normalizedQueryHashKeepNames;

結果:

┌─normalizedQueryHash─┐
│                   0 │
└─────────────────────┘
┌─normalizedQueryHashKeepNames─┐
│                            1 │
└──────────────────────────────┘

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文字に置き換えます。10進数&#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文字に置き換えます。10進数&#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仕様に100準拠していませんが、実装は合理的に正確で高速です。ルールは次の通りです

  1. コメントはスキップされます。例: <!-- test -->。コメントは --> で終了しなければなりません。ネストされたコメントは禁止されています。 注意: <!--><!---> のような構造はHTMLでは有効なコメントではありませんが、他のルールによってスキップされます。
  2. CDATAはそのまま貼り付けられます。注意: CDATAはXML/XHTML固有のものであり、「ベストエフォート」ベースで処理されます。
  3. script および style 要素は、そのすべての内容と共に削除されます。注意: 閉じタグは内容内に現れることはできません。例えば、JS文字列リテラルは "<\/script>" のようにエスケープする必要があります。 注意: コメントおよびCDATAは script または style 内でも可能であり、CDATA内では閉じタグは検索されません。例 <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とscriptタグの処理を示しています。 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

Internationalized Domain Names in Applications (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

Internationalized Domain Names in Applications (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

2つのバイト文字列間のhamming distanceを計算します。

構文

byteHammingDistance(string1, string2)

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

結果:

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

別名: mismatches

stringJaccardIndex

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

構文

stringJaccardIndex(string1, string2)

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

結果:

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

stringJaccardIndexUTF8

stringJaccardIndexと同様ですが、UTF8エンコードされた文字列用です。

editDistance

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

構文

editDistance(string1, string2)

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

結果:

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

別名: levenshteinDistance

editDistanceUTF8

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

構文

editDistanceUTF8(string1, string2)

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

結果:

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

別名: levenshteinDistanceUTF8

damerauLevenshteinDistance

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

構文

damerauLevenshteinDistance(string1, string2)

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

結果:

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

jaroSimilarity

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

構文

jaroSimilarity(string1, string2)

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

結果:

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

jaroWinklerSimilarity

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

構文

jaroWinklerSimilarity(string1, string2)

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

結果:

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

initcap

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

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

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

は以下のように返されます

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

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

構文

initcap(val)

引数

返される値

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

クエリ:

SELECT initcap('building for fast');

結果:

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

initcapUTF8

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

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

構文

initcapUTF8(val)

引数

返される値

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

クエリ:

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

結果:

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

firstLine

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

構文

firstLine(val)

引数

返される値

  • 入力値の最初の行または改行がない場合は全体。String

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

結果:

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