本文介绍字符串函数的基本语法和示例。

日志服务支持如下字符串函数。

注意 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。
函数名称 语法 说明
chr函数 chr(number) 将ASCII码转换为字符。
codepoint函数 codepoint(string) 将字符转换为ASCII码。
concat函数 concat(key01,key02,key03...) 将多个字段的值拼接成一个字符串。
length函数 length(key) 计算字段值的长度。
levenshtein_distance函数 levenshtein_distance(key01,key02) 返回两个字段的值的最小编辑距离。
lower函数 lower(key) 将字段的值转换为小写形式。
lpad函数 lpad(key,length,lpad_string) 在目标字段值的开头填充指定的字符,将字段值填充到一定长度。
ltrim函数 ltrim(key) 删除字段值开头的空格。
position函数 position(sub_string in key) 返回目标子串在字段值中的位置。
replace函数 replace(key,sub_string,replace_string) 将字段值中所匹配的字符替换为其他指定字符。
replace(key,sub_string) 删除字段值中匹配的字符。
reverse函数 reverse(key) 返回反向顺序的字符串。
rpad函数 rpad(key,length,rpad_string) 在字段值的尾部填充指定的字符,将字段值填充到一定长度。
rtrim函数 rtrim(key) 删除字段值中结尾的空格。
split函数 split(key,delimeter,n) 使用指定的分隔符拆分字段值,并返回n个子串集合。
split_part函数 split_part(key,delimeter,part) 使用指定的分隔符拆分字段值,并返回指定位置的内容。
split_to_map函数 split_to_map(key,delimiter01,delimiter02) 使用指定的第一个分隔符拆分字段值,然后再使用指定的第二个分隔符进行第二次拆分。
strpos函数 strpos(key,sub_string) 返回目标子串在字段值中的位置。与position(sub_string in key)函数等价。
substr函数 substr(key,start) 返回字段值中指定位置的子串。
substr(key,start,length) 返回字段值中指定位置的子串,并限制子串长度。
trim函数 trim(key) 删除字段值中开头和结尾的空格。
upper函数 upper(key) 将字段的值转化为大写形式。

chr函数

CHR函数用于将ASCII码转换为字符。

语法

chr(number)

参数说明

number:ASCII码。

返回值类型

varchar类型。

示例

判断region字段值的首字母是否是c开头,其中99为ASCII码,代表小写字母c。
  • 字段样例
    region:cn-shanghai
  • 查询和分析语句
    * | SELECT substr(region, 1, 1)=chr(99)
  • 查询和分析结果chr

codepoint函数

codepoint函数用于将字符转换为ASCII码。

语法

codepoint(string)

参数说明

string:字符。

返回值类型

integer类型。

示例

判断region字段值的首字母是否是c开头,其中99为ASCII码,代表小写字母c。
  • 字段样例
    upstream_status:200
  • 查询和分析语句
    * | SELECT codepoint(cast (substr(region, 1, 1) AS char(1))) =99
  • 查询和分析结果codepoint

concat函数

concat函数用于将多个字段的值拼接成一个字符串。

语法

concat(key01,key02,key03...)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

region字段和request_method字段的值拼接为一个字符串。
  • 字段样例
    region:cn-shanghai
    time_local:14/Jul/2021:02:19:40
  • 查询和分析语句
    * | SELECT concat(region,'-',time_local)
  • 查询和分析结果concat函数

length函数

length函数用于计算字段值的长度。

语法

length(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

bigint类型。

示例

计算http_user_agent字段值的长度。
  • 字段样例
    http_user_agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2
  • 查询和分析语句
    * | SELECT length(http_user_agent)
  • 查询和分析结果length函数

levenshtein_distance函数

levenshtein_distance函数用于返回两个字段的值的最小编辑距离。

语法

levenshtein_distance(key01,key02)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

bigint类型。

示例

查询instance_id字段值和owner_id字段值的最小编辑距离。
  • 字段样例
    instance_id:i-01
    owner_id:owner-01
  • 查询和分析语句
    * | SELECT levenshtein_distance(owner_id,instance_id)
  • 查询和分析结果levenshtein_distance

lower函数

lower函数用于将字段值转换为小写形式。

语法

lower(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

request_method字段的值转换为小写形式。
  • 字段样例
    request_method:GET
  • 查询和分析语句
    * | SELECT lower(request_method)
  • 查询和分析结果lower函数

lpad函数

lpad函数用于在目标字段的值的开头填充指定的字符,将字段值填充到一定长度。

语法

lpad(key,length,lpad_string)

参数说明

  • key:字段名称,字段值为varchar类型。
  • length:整数,用于限制返回结果的长度。
    • 当字段值的长度小于length时,在字段值的开头填充指定的字符。
    • 当字段值的长度大于length时,只返回字段值中的length个字符。
  • lpad_string:新填充的字符。

返回值类型

varchar类型。

示例

instance_id字段值的长度补充到10位,不足10位时,在字段值的开头补充0。
  • 字段样例
    instance_id:i-01
  • 查询和分析语句
    * | SELECT lpad(instance_id,10,'0')
  • 查询和分析结果lpad

ltrim函数

ltrim函数用于删除字段值中开头的空格。

语法

ltrim(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

删除region字段值开头的空格。
  • 字段样例
    region: cn-shanghai
  • 查询和分析语句
    * | SELECT ltrim(region)
  • 查询和分析结果ltrim

position函数

position函数用于查询目标子串在字段值中的位置。

语法

position(sub_string in key)

参数说明

  • sub_string :目标子串。
  • key:字段名称,字段值为varchar类型。

返回值类型

int类型,从1开始。

示例

查询子串cnregion字段值中位置。
  • 字段样例
    region:cn-shanghai
  • 查询和分析语句
    * | SELECT position('cn' in region)
  • 查询和分析结果position函数

replace函数

replace函数用于将字段值中所匹配的字符替换为其他指定字符。

语法

replace(key,sub_string,replace_string)

参数说明

  • key:字段名称,字段值为varchar类型。
  • sub_string:目标子串。
  • replace_string:替换后的子串。

返回值类型

varchar类型。

示例

region字段值中的cn替换为中国
  • 字段示例
    region:cn-shanghai
  • 查询和分析语句
    * | select replace(region,'cn','中国')
  • 查询和分析结果replace

reverse函数

reverse函数用于返回反向顺序的字符串。

语法

reverse(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

request_method字段值反向排序。
  • 字段样例
    request_method:GET
  • 查询和分析语句
    * | SELECT reverse(request_method)
  • 查询和分析结果reverse

rpad函数

rpad函数用于在字段值的尾部填充指定的字符,将字段值填充到一定长度。

语法

rpad(key,length,rpad_string)

参数说明

  • key:字段名称,字段值为varchar类型。
  • length:整数,用于限制返回结果的长度。
    • 当字段值的长度小于length时,在字段值的尾部填充指定的字符。
    • 当字段值的长度大于length时,只返回字段值中的length个字符。
  • rpad_string:新填充的字符。

返回值类型

varchar类型。

示例

instance_id字段值的长度补充到10位,不足10位时,在字段值的尾部补充0。
  • 字段样例
    instance_id:i-01
  • 查询和分析语句
    * | SELECT rpad(instance_id,10,'0')
  • 查询和分析结果rpad

rtrim函数

rtrim函数用于删除字段值中结尾的空格。

语法

rtrim(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

删除instance_id字段值中结尾的空格。
  • 字段样例
    instance_id:i-01 
  • 查询和分析语句
    * | SELECT rtrim(instance_id)
  • 查询和分析结果rtrim

split函数

split函数用于通过指定的分隔符拆分字段值,并返回n个子串集合。

语法

split(key,delimeter,n)

参数说明

  • key:字段名称,字段值为varchar类型。
  • delimeter:分隔符。
  • n:大于0的整数。

返回值类型

array类型。

示例

使用正斜线(/)将server_protocol字段的值拆分成2个子串,并返回子串的集合。
  • 字段样例
    server_protocol:HTTP/2.0
  • 查询和分析语句
    * | SELECT split(server_protocol,'/',2)
  • 查询和分析结果split

split_part函数

split_part函数通过指定的分隔符拆分字段值,并返回指定位置的内容。

语法

split_part(key,delimeter,part)

参数说明

  • key:字段名称,字段值为varchar类型。
  • delimeter:分隔符。
  • part:大于0的整数。

返回值类型

varchar类型。

示例

使用英文问号(?)拆分request_uri字段的值并返回第一个子串(即文件路径部分),然后统计不同路径对应的请求数量。
  • 查询和分析语句
    * | SELECT count(*) AS PV, split_part(request_uri, '?', 1) AS Path GROUP BY Path ORDER BY pv DESC LIMIT 3
  • 查询和分析结果TOP3访问地址

split_to_map函数

split_to_map函数用于使用指定的第一个分隔符拆分字段值,然后再使用指定的第二个分隔符进行第二次拆分。

语法

split_to_map(key,delimiter01,delimiter02)

参数说明

  • key:字段名称,字段值为varchar类型。
  • delimeter01:分隔符。
  • delimeter02:分隔符。

返回值类型

map类型。

示例

使用英文逗号(,)和英文冒号(:)拆分time字段的值,返回结果为MAP类型。
  • 字段样例
    time:upstream_response_time:"80", request_time:"40"
  • 查询和分析语句
    * | SELECT split_to_map(time,',',':')
  • 查询和分析结果split_to_map

strpos函数

strpos函数用于返回目标子串在字段值中的位置。与position函数等价。

语法

strpos(key,sub_string)

参数说明

  • key:字段名称,字段值为varchar类型。
  • sub_string:目标子串。

返回值类型

int类型,从1开始。

示例

返回字母H在server_protocol字段值中的位置。
  • 查询和分析语句
    * | SELECT strpos(server_protocol,'H')
  • 查询和分析结果strpos

substr函数

substr函数用于返回字段值中指定位置的子串。

语法

  • 返回字段值中指定位置的子串。
    substr(key,start)
  • 返回字段值中指定位置的子串,并限制子串长度。
    substr(key,start,length)

参数说明

  • key:字段名称,字段值为varchar类型。
  • start:开始提取子串的位置,从1开始。
  • length:子串的长度。

返回值类型

varchar类型。

示例

提取server_protocol字段值中的前4个字符(即HTTP部分),然后统计HTTP协议对应的请求数量。
  • 字段样例
    server_protocol:HTTP/2.0
  • 查询和分析语句
    * | SELECT substr(server_protocol,1,4) AS protocol, count(*) AS count GROUP BY server_protocol
  • 查询和分析结果substr

trim函数

trim函数用于删除字段值中开头和结尾的空格。

语法

trim(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

删除instance_id字段值的开头和结尾的空格。

  • 字段样例
    instance_id: i-01 
  • 查询和分析语句
    * | SELECT trim(instance_id)
  • 查询和分析结果rtrim

upper函数

upper函数用于将目标字段的值转化为大写形式。

语法

upper(key)

参数说明

key:字段名称,字段值为varchar类型。

返回值类型

varchar类型。

示例

region字段值转换为大写形式。
  • 字段样例
    region:cn-shanghai
  • 查询和分析语句
    * | SELECT upper(region)
  • 查询和分析结果upper函数