ClickHouse/docs/ja/sql-reference/functions/string-functions.md
2020-10-13 20:23:29 +03:00

16 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 40 文字列の操作

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

空の文字列の場合は1、空でない文字列の場合は0を返します。 結果の型はUInt8です。 文字列が空白またはnullバイトであっても、少なくとも一つのバイトが含まれている場合、文字列は空ではないと見なされます。 この関数は配列に対しても機能します。

ノーテンプティ

空の文字列の場合は0、空でない文字列の場合は1を返します。 結果の型はUInt8です。 この関数は配列に対しても機能します。

長さ

文字列の長さをバイト単位で返します(文字ではなく、コードポイントではありません)。 結果の型はUInt64です。 この関数は配列に対しても機能します。

lengthUTF8

文字列にUTF-8でエンコードされたテキストを構成するバイトのセットが含まれていると仮定して、Unicodeコードポイント(文字ではない)で文字列の長さを返 この仮定が満たされない場合、結果が返されます(例外はスローされません)。 結果の型はUInt64です。

char_length,CHAR_LENGTH

文字列にUTF-8でエンコードされたテキストを構成するバイトのセットが含まれていると仮定して、Unicodeコードポイント(文字ではない)で文字列の長さを返 この仮定が満たされない場合、結果が返されます(例外はスローされません)。 結果の型はUInt64です。

character_length,CHARACTER_LENGTH

文字列にUTF-8でエンコードされたテキストを構成するバイトのセットが含まれていると仮定して、Unicodeコードポイント(文字ではない)で文字列の長さを返 この仮定が満たされない場合、結果が返されます(例外はスローされません)。 結果の型はUInt64です。

lower,lcase

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

アッパー,ucase

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

lowerUTF8

文字列にUTF-8でエンコードされたテキストを構成するバイトのセットが含まれていると仮定して、文字列を小文字に変換します。 それは言語を検出しません。 そのためにトルコに結果が正確に正しい。 UTF-8バイト-シーケンスの長さがコード-ポイントの大文字と小文字で異なる場合、このコード-ポイントの結果が正しくない可能性があります。 文字列にUTF-8以外のバイトセットが含まれている場合、動作は未定義です。

upperUTF8

文字列にUTF-8でエンコードされたテキストを構成するバイトのセットが含まれていると仮定して、文字列を大文字に変換します。 それは言語を検出しません。 そのためにトルコに結果が正確に正しい。 UTF-8バイト-シーケンスの長さがコード-ポイントの大文字と小文字で異なる場合、このコード-ポイントの結果が正しくない可能性があります。 文字列にUTF-8以外のバイトセットが含まれている場合、動作は未定義です。

isValidUTF8

バイトセットが有効なUTF-8エンコードの場合は1を返し、それ以外の場合は0を返します。

toValidUTF8

無効なUTF-8文字を <EFBFBD> (U+FFFD)文字。 行で実行されているすべての無効な文字は、一つの置換文字に折りたたまれます。

toValidUTF8( input_string )

パラメータ:

  • input_string — Any set of bytes represented as the 文字列 データ型オブジェクト。

戻り値:有効なUTF-8文字列。

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

繰り返し

指定した回数だけ文字列を繰り返し、複製された値を単一の文字列として連結します。

構文

repeat(s, n)

パラメータ

  • s — The string to repeat. 文字列.
  • n — The number of times to repeat the string. UInt.

戻り値

文字列を含む単一の文字列 s 繰り返し n タイムズ もし n <1、関数は空の文字列を返します。

タイプ: String.

クエリ:

SELECT repeat('abc', 10)

結果:

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

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

reverseUTF8

文字列にUTF-8テキストを表すバイトのセットが含まれていると仮定して、Unicodeコードポイントのシーケンスを反転します。 それ以外の場合は、何か他のことをします(例外はスローされません)。

format(pattern, s0, s1, …)

引数にリストされた文字列で定数パターンを書式設定します。 pattern 単純化されたPython形式のパターンです。 書式指定文字列 “replacement fields” 中括弧で囲む {}. 中かっこに含まれていないものはリテラルテキストと見なされ、そのまま出力にコピーされます。 リテラルテキストに中かっこ文字を含める必要がある場合は、倍にすることでエスケープできます: {{ '{{' }}{{ '}}' }}. フィールド名には、数値(ゼロから始まる)または空(結果の数値として扱われます)を指定できます。

SELECT format('{1} {0} {1}', 'World', 'Hello')
┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello                       │
└─────────────────────────────────────────┘
SELECT format('{} {}', 'Hello', 'World')
┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World                       │
└───────────────────────────────────┘

コンカ

引数にリストされている文字列を、区切り記号なしで連結します。

構文

concat(s1, s2, ...)

パラメータ

String型またはFixedString型の値。

戻り値

引数を連結した結果の文字列を返します。

引数値のいずれかが NULL, concat ツづゥツ。 NULL.

クエリ:

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

結果:

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

concatAssumeInjective

同じ コンカ 違いは、次のことを確認する必要があるということです concat(s1, s2, ...) → sn はinjectiveであり、GROUP BYの最適化に使用されます。

関数の名前は次のとおりです “injective” 引数の異なる値に対して常に異なる結果を返す場合。 言い換えれば異なる引数のない利回り同一の結果です。

構文

concatAssumeInjective(s1, s2, ...)

パラメータ

String型またはFixedString型の値。

戻り値

引数を連結した結果の文字列を返します。

引数値のいずれかが NULL, concatAssumeInjective ツづゥツ。 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 │
└────────────────────┴────────────┘

substring(s,offset,length),mid(s,offset,length),substr(s,offset,length)

バイトで始まる部分文字列を返します。 offset であるインデックス length バイト長。 文字割り出し開始から一つとしての標準SQL). その offsetlength 引数は定数である必要があります。

substringUTF8(s,オフセット,長さ)

と同じ substring しかし、Unicodeコードポイントの場合。 作品は、この文字列が含まれるセットを表すバイトのUTF-8で符号化されます。 この仮定が満たされない場合、結果が返されます(例外はスローされません)。

appendTrailingCharIfAbsent(s,c)

もし s 文字列は空ではなく、 c 最後に文字を追加します。 c 最後に文字。

convertCharset(s,from,to)

文字列を返します s それはで符号化から変換された from のエンコーディングに to.

base64Encode(s)

エンコード s base64への文字列

base64Decode(s)

Base64エンコードされた文字列をデコード s 元の文字列に。 障害が発生した場合には例外を発生させます。

tryBase64Decode(s)

Base64Decodeに似ていますが、エラーの場合は空の文字列が返されます。

endsWith(s,接尾辞)

指定した接尾辞で終わるかどうかを返します。 文字列が指定された接尾辞で終わる場合は1を返し、それ以外の場合は0を返します。

startsWith(str,プレフィックス)

文字列が指定された接頭辞で始まるかどうかは1を返します。

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

戻り値

  • 文字列が指定された接頭辞で始まる場合は、1。
  • 文字列が指定された接頭辞で始まらない場合は0。

クエリ:

SELECT startsWith('Hello, world!', 'He');

結果:

┌─startsWith('Hello, world!', 'He')─┐
│                                 1 │
└───────────────────────────────────┘

トリム

指定したすべての文字を文字列の先頭または末尾から削除します。 デフォルトでは、文字列の両端から共通の空白(ASCII文字32)が連続して出現するすべてを削除します。

構文

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

パラメータ

  • trim_character — specified characters for trim. 文字列.
  • input_string — string for trim. 文字列.

戻り値

先頭および(または)末尾に指定された文字を含まない文字列。

タイプ: String.

クエリ:

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

結果:

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

トリムレフト

文字列の先頭から連続して出現する共通の空白(ASCII文字32)をすべて削除します。 他の種類の空白文字(タブ、改行なしスペースなど)は削除されません。).

構文

trimLeft(input_string)

別名: ltrim(input_string).

パラメータ

  • input_string — string to trim. 文字列.

戻り値

共通の空白の先頭を持たない文字列。

タイプ: String.

クエリ:

SELECT trimLeft('     Hello, world!     ')

結果:

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

トリムライト

文字列の末尾から連続して出現するすべての共通空白(ASCII文字32)を削除します。 他の種類の空白文字(タブ、改行なしスペースなど)は削除されません。).

構文

trimRight(input_string)

別名: rtrim(input_string).

パラメータ

  • input_string — string to trim. 文字列.

戻り値

共通の空白を末尾に付けない文字列。

タイプ: String.

クエリ:

SELECT trimRight('     Hello, world!     ')

結果:

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

トリンボス

文字列の両端から共通の空白(ASCII文字32)が連続して出現するすべてを削除します。 他の種類の空白文字(タブ、改行なしスペースなど)は削除されません。).

構文

trimBoth(input_string)

別名: trim(input_string).

パラメータ

  • input_string — string to trim. 文字列.

戻り値

共通の空白文字の先頭と末尾を持たない文字列。

タイプ: String.

クエリ:

SELECT trimBoth('     Hello, world!     ')

結果:

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

CRC32(s)

CRC-32-IEEE802.3多項式と初期値を使用して、文字列のCRC32チェックサムを返します 0xffffffff zlibの実装

結果の型はUInt32です。

CRC32IEEE(s)

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

結果の型はUInt32です。

CRC64(s)

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

結果の型はUInt64です。

元の記事