tencent cloud

日志服务

动态与公告
产品动态
公告
新手指引
产品简介
产品概述
产品优势
地域和访问域名
规格与限制
基本概念
购买指南
计费概述
产品定价
按量计费(后付费)
欠费说明
清理日志服务资源
成本优化
常见问题
快速入门
一分钟入门指南
入门指南
使用 Demo 日志快速体验 CLS
操作指南
资源管理
权限管理
日志采集
指标采集
日志存储
指标存储
检索分析(日志主题)
检索分析(指标主题)
仪表盘
数据处理
投递与消费
监控告警
云产品中心
DataSight 独立控制台
历史文档
实践教程
日志采集
检索分析
仪表盘
监控告警
投递和消费
成本优化
开发者指南
通过 iframe 内嵌 CLS(旧方案)
通过 Grafana 使用 CLS
API 文档
History
Introduction
API Category
Making API Requests
Topic Management APIs
Log Set Management APIs
Index APIs
Topic Partition APIs
Machine Group APIs
Collection Configuration APIs
Log APIs
Metric APIs
Alarm Policy APIs
Data Processing APIs
Kafka Protocol Consumption APIs
CKafka Shipping Task APIs
Kafka Data Subscription APIs
COS Shipping Task APIs
SCF Delivery Task APIs
Scheduled SQL Analysis APIs
COS Data Import Task APIs
Data Types
Error Codes
常见问题
健康监测问题解释
采集相关
检索分析相关
其他问题
服务等级协议
CLS 政策
隐私协议
数据处理和安全协议
联系我们
词汇表

字符串函数

PDF
聚焦模式
字号
最后更新时间: 2025-11-19 20:07:19
本文介绍字符串函数的基本语法和示例。
注意:
字符串必须使用单引号''包裹,无符号包裹或被双引号""包裹的字符表示字段或列名。例如'status'表示字符串 status,status"status"表示日志字段 status。
字符串内本身包含单引号'时,需使用''(两个单引号)代表单引号本身。例如'{''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。
将多个字符串拼接成一个字符串。
* | SELECT concat(remote_addr, host, time_local)
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 作为分隔符将数组内的元素连接为一个字符串。如果 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 字符串的汉明距离。注意两个字符串长度必须一致。返回结果为 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 类型。
返回 'G' 字符在 http_method 中的位置。
* | 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 类型。
返回 host 字符中经过 ‘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 类型。
返回 Mozila 的单词。
* | SELECT word_stem('Mozilla')
word_stem(word, lang)
返回 word 的 lang 语言词根。返回结果为 varchar 类型。
返回 selects 词根的单词。
* | SELECT word_stem('selects', 'en')

Unicode 函数

函数名称
说明
normalize(string)
转化 string 为 NFC 标准格式。返回结果为 varchar 类型。
normalize(string, form)
转化 string 为 form 格式。该函数 form 参数需要使用关键字(NFD,NFC,NFKD,NFKC),而非字符串。返回结果为 varchar 类型。
to_utf8(string)
将 string 转化为 UTF-8 格式的二进制字符串 varbinary。返回结果为 varchar 类型。
from_utf8(binary)
将二进制字符串转为 UTF-8 格式的字符串。非法的 UTF-8 字符会被替换为 U+FFFD。返回结果为 varchar 类型。
from_utf8(binary, replace)
将二进制字符串转为 UTF-8 格式的字符串。非法的 UTF-8 字符会被替换为 replace。返回结果为 varchar 类型。

示例

基于如下日志样例介绍查询和分析语句示例。 原始日志数据样例:
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')


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈