本文介绍字符串函数的基本语法和示例。
基本语法
- 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status或"status"表示日志字段status。
- 如下函数中的key参数均表示日志字段名称。
函数名称 | 说明 |
---|---|
chr(number) | 返回与输入参数指定的ASCII码位值匹配的字符。 |
codepoint(key) | 把ASCII码形式的字段值转换为BigInt类型。 |
length(key) | 计算字符串的长度。
返回结果为INT类型。 |
lower(key) | 将字符串转换为小写形式。
返回结果为VARCHAR类型,小写形式。 |
upper(key) | 将字符串转化为大写字符。
返回结果为VARCHAR类型,大写形式。 |
lpad(key, length, lpad_string) | 在字符串的左侧填充指定的子串,将字符串填充到一定长度。
length为整数,用于限制返回结果的长度。
返回结果为VARCHAR类型。 |
rpad(key, length,rpad_string) | 在字符串的右侧填充指定的子串,将字符串填充到一定长度。
length为整数,用于限制返回结果的长度。
返回结果为VARCHAR类型。 |
trim(key) | 删除字符串中开头和结尾的空格。
返回结果为VARCHAR类型。 |
ltrim(key) | 删除字符串中开头的空格。
返回结果为VARCHAR类型。 |
rtrim(key) | 删除字符串中结尾的空格。
返回结果为VARCHAR类型。 |
replace(key,substring,replace) | 将字符串中所匹配的字符替换为其他指定字符。
返回结果为VARCHAR类型。 |
replace(key,substring) | 删除字符串中匹配的字符。
返回结果为VARCHAR类型。 |
reverse(key) | 返回反向顺序的字符串。 |
split(key,delimeter,N) | 使用指定的分隔符拆分字符串,并返回N个子串集合。
返回结果为Array类型。 |
split_part(key,delimeter,part) | 使用指定的分隔符拆分字符串,并返回指定位置的内容。
part为大于0的整数。 返回结果为VARCHAR类型。 |
split_to_map(key, delimiter01, delimiter02) | 使用指定的第一个分隔符拆分字符串,然后再使用指定的第二个分隔符进行第二次拆分。
返回结果为MAP类型。 |
position(substring IN key) | 返回目标子串在字符串中的位置。
返回结果为INT类型,从1开始。 |
strpos(key, substring) | 返回目标子串在字符串中的位置。与position(substring IN key)函数等价。
返回结果为INT类型,从1开始。 |
substr(key, start) | 返回字符串中指定位置的子串。
start表示开始提取子串的位置,从1开始。 返回结果为VARCHAR类型。 |
substr(key, start, length) | 返回字符串中指定位置的子串,并限制子串长度。
start表示开始提取子串的位置,从1开始。length表示子串的长度。 返回结果为VARCHAR类型。 |
concat(key01,key02,key03) | 将多个字符串拼接成一个字符串。
返回结果为INT类型,从1开始。 |
levenshtein_distance(key01, key02) | 返回两个字符串的最小编辑距离。 |
hamming_distance (string1,string2) | 返回两个字符串的汉明距离。 |
示例
http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2
request_uri:/request/path-1/file-9?0457349059345
scheme:https
server_protocol:HTTP/2.0
region:cn-shanghai
time: upstream_response_time:"80", request_time:"40"
- 使用问号(?)拆分request_uri字段的值并返回第一个子串(即文件路径部分),然后统计不同路径对应的请求数量。
* | SELECT count(*) AS PV, split_part(request_uri, '?', 1) AS Path GROUP BY Path ORDER BY pv DESC LIMIT 3
- 提取server_protocol字段值中的前4个字符(即HTTP部分),然后统计HTTP协议对应的请求数量。
* | SELECT substr(server_protocol,1,4) AS protocol, count(*) AS count GROUP BY server_protocol
- 使用逗号(,)和冒号(:)拆分time字段的值,返回结果为MAP类型。
* | SELECT split_to_map(time,',',':')
- 判断http_user_agent字段的值是否以字母M开头。
* | SELECT substr(http_user_agent, 1, 1)=chr(77)
- 返回字母H在server_protocol字段值中的位置。
* | SELECT strpos(server_protocol,'H')
- 使用正斜线(/)将server_protocol字段的值拆分成2个子串,并返回子串的集合。
* | SELECT split(server_protocol,'/',2)
- 将region字段值中的cn替换为中国。
* | select replace(region,'cn','中国')