tencent cloud

Cloud Log Service

文字列関数

다운로드
포커스 모드
폰트 크기
마지막 업데이트 시간: 2026-10-12 14:32:15
AI 번역
この記事では、文字列関数の基本構文と例を紹介します。
注意
文字列は必ず一重引用符''で囲む必要があります。記号で囲まれていない文字、または二重引用符""で囲まれた文字は、フィールドまたは列名を表します。例えば、'status'は文字列statusを表し、statusまたは"status"はログフィールドstatusを表します。
文字列内に一重引用符'が含まれる場合は、''(2つの一重引用符)を使用して一重引用符そのものを表す必要があります。例えば、'{''version'': ''1.0''}'は元の文字列{'version': '1.0'}を表します。文字列内に二重引用符"が含まれる場合は、特別な処理は不要です。
以下の関数におけるkeyパラメータは、すべてログフィールド名を表します。

関数説明

関数名
説明
例
chr
(number)
入力パラメータで指定されたASCIIコード位置に対応する文字を返します。戻り値はvarchar型です。
77番目のASCIIコードに一致する文字値を返します。 * | SELECT chr(77)
codepoint
(string)
ASCIIコード形式のフィールド値をBigInt型に変換します。戻り値はinteger型です。
ASCIIコード内の文字値を対応する位置に変換します。 * | SELECT codepoint('M')
concat
(key1, ..., keyN)
文字列key1、key2、...keyNを連結します。これは||連結子と同じ効果です。戻り値はvarchar型です。注意:いずれかの文字列がnullの場合、戻り値はnullです。nullをスキップするには、concat_wsを使用します。
複数の文字列を1つの文字列に連結します:* | SELECT concat(remote_addr, host, time_local)
2つの文字列を1つの文字列に連結し、改行します:* | SELECT concat('第一行', chr(10), '第二行')
説明:
ここで、chr(10)はASCIIコードを使用して改行文字を表します。
concat_ws
(split_string,key0, ..., keyN)
split_stringを区切り文字として文字列key1、key2、...keyNを連結します。split_stringには文字列または変数を指定できます。split_stringがnullの場合、結果はnullとなり、key1、key2、...keyN内のnull値はスキップされます。戻り値はvarchar型です。
/を区切り文字として文字列間の連結を行います。
* | SELECT concat_ws('/', remote_addr,host,time_local)
concat_ws
(split_string, array(varchar))
split_stringを区切り文字として配列内の要素を1つの文字列に連結します。split_stringがnullの場合、結果はnullとなり、配列内のnull値はスキップされます。戻り値はvarchar型です。 注意:この関数のarray(varchar)パラメータは配列であり、文字列ではありません。
#を区切り文字として文字列間の連結を行います。この例では、split関数の出力はarrayです。
* | select concat_ws('#',split('cloud.tencent.com/product/cls', '/'))
format
(format、args...)
フォーマットformatを使用してパラメータargsをフォーマット出力します。戻り値はvarchar型です。
format形式「IP アドレス: %s, ドメイン: %s」を使用して、パラメータ remote_addr とパラメータ host をフォーマットして出力します。 * | SELECT format('IP地址: %s, 域名: %s', remote_addr, host)
hamming_distance
(key1, key2)
key1文字列とkey2文字列のハミング距離を返します。注意:2つの文字列の長さは一致している必要があります。戻り値はbigint型です。
remote_addr文字列とremote_addr文字列のハミング距離を返します。 * | SELECT hamming_distance(remote_addr, remote_addr)
length
(key)
文字列の長さを計算します。戻り値はbigint型です。
http_user_agent の文字列の長さを返します。 * | SELECT length(http_user_agent)
levenshtein_distance
(key1, key2)
文字列key1とkey2の編集距離を返します。戻り値はbigint型です。
remote_addr文字列とhttp_protocol文字列の編集距離を返します。 * | SELECT levenshtein_distance(remote_addr, http_protocol)
lower
(key)
文字列を小文字に変換します。戻り値はvarchar型の小文字形式です。
http_protocol文字列を小文字に変換します。 * | SELECT lower(http_protocol)
lpad
(key, size, padstring)
padstringを使用して文字列を左側にsizeの長さまで埋めます。sizeがkeyの長さより小さい場合、文字列をsizeの長さに切り詰めます。sizeは非負である必要があり、padstringは空であってはなりません。戻り値はvarchar型です。
「0」を使用してremote_addr文字列を左側に32文字まで補完します。 * | SELECT lpad(remote_addr, 32, '0')
ltrim
(key)
文字列の左側にある空白文字を削除します。戻り値はvarchar型です。
http_user_agent文字列の左側にある空白文字を削除します。 * | SELECT ltrim(http_user_agent)
position
(substring IN key)
substringが文字列内で最初に出現する位置を返します。位置は1から始まります。見つからない場合は0を返します。この関数は特別な構文としてINをパラメータに使用します。また、strpos()も参照してください。戻り値はbigint型です。
http_method における 'G' 文字の位置を返します。 * | select position('G' IN http_method)
replace
(key, substring)
文字列keyからすべてのsubstring文字列を削除します。戻り値はvarchar型です。
time_local文字列からすべての「Oct」を削除します。 * | select replace(time_local, 'Oct')
replace
(key, substring, replace)
文字列内のすべてのsubstringをreplaceの文字列に置き換えます。戻り値はvarchar型です。
time_local文字列内のすべての「Oct」を「10」に置き換えます。 * | select replace(time_local,'Oct','10')
reverse
(key)
文字列keyを反転します。戻り値はvarchar型です。
host文字列を反転します。 * | select reverse(host)
rpad
(key, size, padstring)
padstringを使用して文字列を右側にsizeの長さまで埋めます。sizeがkeyの長さより小さい場合、文字列をsizeの長さに切り詰めます。sizeは非負である必要があり、padstringは空であってはなりません。戻り値はvarchar型です。
「0」を使用してremote_addr文字列を右側に32文字まで補完します。 * | select rpad(remote_addr, 32, '0')
rtrim
(key)
文字列の右側にあるすべての空白文字を削除します。戻り値はvarchar型です。
http_user_agent文字列の右側にあるすべての空白文字を削除します。 * | select rtrim(http_user_agent)
split
(key, delimiter)
指定された区切り文字を使用して文字列を分割し、文字列配列を返します。
指定された「/」区切り文字を使用してhttp_user_agent文字列を分割し、文字列配列を返します。 * | SELECT split(http_user_agent, '/')
split
(key, delimiter, limit)
指定された区切り文字を使用して文字列を分割し、文字列配列を返します。配列の長さは最大でlimitです。配列の最後の要素は常にkey内の残りすべての部分です。limitは正の数である必要があります。
指定された「/」区切り文字を使用してhttp_user_agent文字列を分割し、配列長が10の文字列配列を返します。 * | SELECT split(http_user_agent, '/', 10)
split_part
(key, delimiter, index)
指定された区切り文字を使用して文字列を分割し、配列内のindex番目の文字列を返します。indexは1から始まります。indexが配列の長さより大きい場合、nullを返します。戻り値はvarchar型です。
指定された「/」区切り文字を使用してhttp_user_agent文字列を分割し、1番目の文字列を返します。 * | SELECT split_part(http_user_agent, '/', 1)
strpos
(key, substring)
substringが文字列内で最初に出現する位置を返します。位置は1から始まります。見つからない場合は0を返します。戻り値はbigint型です。
「org」文字列のhost文字列内での位置を返します。 * | SELECT strpos(host, 'org')
strpos
(key, substring, instance)
substringで分割された文字列内のinstance番目のインスタンスのstring内での位置を返します。instanceが負の数の場合、末尾から数えます。位置は1から始まり、見つからない場合は0を返します。戻り値はbigint型です。
「g」で分割した後の1番目のインスタンスのhost文字列内での位置を返します。 * | SELECT strpos(host, 'g', 1)
substr
(key, start)
文字列内のstart位置から始まる残りすべての文字を返します。位置は1から数えます。startが負の数の場合、末尾から数えます。例:[...]戻り値はvarchar型です。
remote_user文字列の2番目以降の残りの文字を返します。 * | SELECT substr(remote_user, 2)
substr
(key, start, length)
文字列内のstart位置から始まる最大length文字数の部分文字列を返します。位置は1から数えます。startが負の数の場合、末尾から数えます。戻り値はvarchar型です。
remote_user文字列の2番目から始まる、長さが5を超えない残りの文字を返します。 * | SELECT substr(remote_user, 2, 5)
translate
(key, from, to)
key内でfromに含まれる文字をすべて、to内の対応する位置の文字に置き換えます。fromに重複する文字が含まれる場合、最初の文字のみが有効です。sourceにfromの文字が含まれない場合、sourceはそのままコピーされます。fromの長さがtoの長さを超える場合、対応する文字は削除されます。戻り値はvarchar型です。
remote文字列内の「123」の文字を「ABC」の対応する文字に置き換えます。 * | SELECT translate(remote_user, '123', 'ABC')
trim
(key)
文字列の前後にある空白文字を削除します。戻り値はvarchar型です。
http_cookies文字列の前後にある空白文字を削除します。 * | SELECT trim(http_cookies)
upper
(key)
文字列を大文字に変換します。戻り値はvarchar型の大文字形式です。
host文字列内の小文字を大文字に変換します。 * | SELECT upper(host)
word_stem
(word)
wordの英語の単語を返します。戻り値はvarchar型です。
Mozillaの単語を返します。
* | SELECT word_stem('Mozilla')
word_stem
(word, lang)
wordのlang言語の語根を返します。戻り値はvarchar型です。
selectsの語根の単語を返します。 * | SELECT word_stem('selects', 'en')

Unicode関数

関数名
説明
例
normalize
(string)
stringをNFC標準形式に変換します。戻り値はvarchar型です。
* | SELECT normalize('ĉ')
normalize
(string, form)
stringをform形式に変換します。この関数のformパラメータには、文字列ではなくキーワード(NFD、NFC、NFKD、NFKC)を使用する必要があります。戻り値はvarchar型です。
* | SELECT normalize('ĉ',NFC)
to_utf8
(string)
stringをUTF-8形式のバイナリ文字列varbinaryに変換します。
* | SELECT to_utf8('test')
from_utf8
(binary)
バイナリ文字列をUTF-8形式の文字列に変換します。不正なUTF-8文字はU+FFFDに置き換えられます。戻り値はvarchar型です。
* | SELECT from_utf8(from_base64('SGVsbG8='))
from_utf8
(binary, replace)
バイナリ文字列をUTF-8形式の文字列に変換します。不正なUTF-8文字はreplaceに置き換えられます。戻り値はvarchar型です。
* | SELECT from_utf8(from_base64('SGVsbG8='),0)

例

以下のログサンプルに基づいて、クエリおよび分析ステートメントの例を紹介します。 元のログデータサンプル:
10.135.46.111 - - [05/Oct/2015:21:14:30 +0800] "GET /my/course/1 HTTP/1.1" 127.0.0.1 200 782 9703 "http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNum" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0" 0.354 0.354
単一行-完全正規表現収集モードを設定した後、カスタムkey名は以下のようになります:
body_bytes_sent: 9703
http_host: 127.0.0.1
http_protocol: HTTP/1.1
http_referer: http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNum
http_user_agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0
remote_addr: 10.135.46.111
request_length: 782
request_method: GET
request_time: 0.354
request_url: /my/course/1
status: 200
time_local: [05/Oct/2015:21:14:30 +0800]
upstream_response_time: 0.354
分析ステートメントの例:
疑問符(?)を使用してrequest_urlフィールドの値を分割し、最初の文字列(つまりファイルパス部分)を返し、異なるパスに対応するリクエスト数を集計します。
* | SELECT count(*) AS pv, split_part(request_url, '?', 1) AS Path GROUP BY Path ORDER BY pv DESC LIMIT 3
フィールド値http_protocolの先頭4文字(つまりHTTP部分)を抽出し、HTTPプロトコルに対応するリクエスト数を集計します。
* | SELECT substr(http_protocol,1,4) AS http_protocol, count(*) AS count group by http_protocol
remote_user文字列内の123の文字をABCに対応する文字に置換し、結果をvarchar型で返します。
* | SELECT translate(remote_user, '123', 'ABC')
フィールド値remote_userから2番目から5番目までの値を抽出します。
* | SELECT substr(remote_user, 2, 5)
アルファベットHのhttp_protocolフィールド値内での位置を返します。
* | SELECT strpos(http_protocol, 'H')
正斜線(/)を使用してhttp_protocolフィールドの値を2つのサブ文字列に分割し、サブ文字列の集合を返します。
* | SELECT split(http_protocol, '/', 2)
time_localフィールド値内のOctを10に置換します。
* | SELECT replace(time_local, 'Oct', '10')


도움말 및 지원

문제 해결에 도움이 되었나요?

피드백