本文介紹字串函數的基本文法和樣本。
Log Service支援如下字串函數。
函數名稱 | 文法 | 說明 | 支援SQL | 支援SPL |
chr(x) | 將ASCII碼轉換為字元。 | √ | √ | |
codepoint(x) | 將字元轉換為ASCII碼。 | √ | √ | |
concat(x, y...) | 將多個字串拼接成一個字串。 | √ | √ | |
from_utf8(x) | 將二進位字串解碼為UTF-8編碼格式,並使用預設字元U+FFFD替換無效的UTF-8字元。 | √ | √ | |
from_utf8(x, replace_string) | 將二進位字串解碼為UTF-8編碼格式,並使用自訂字串替換無效的UTF-8字元。 | √ | √ | |
length(x) | 計算字串的長度。 | √ | √ | |
levenshtein_distance(x, y) | 計算x和y之間的最小編輯距離。 | √ | × | |
lower(x) | 將字串轉換為小寫形式。 | √ | √ | |
lpad(x, length, lpad_string) | 在字串的開頭填充指定字元,直到指定長度後返回結果字串。 | √ | √ | |
ltrim(x) | 刪除字串開頭的空格。 | √ | √ | |
normalize(x) | 使用NFC格式將字串格式化。 | √ | × | |
position(sub_string in x) | 返回目標子串在字串中的位置。 | √ | × | |
replace(x, sub_string ) | 刪除字串中匹配的字元。 | √ | √ | |
replace(x, sub_string, replace_string) | 將字串中所匹配的字元替換為其他指定字元。 | √ | √ | |
reverse(x) | 返回反向順序的字串。 | √ | √ | |
rpad(x, length, rpad_string) | 在字串的尾部填充指定字元,直到指定長度後返回結果字串。 | √ | √ | |
rtrim(x) | 刪除字串中結尾的空格。 | √ | √ | |
split(x, delimeter) | 使用指定的分隔字元拆分字串,並返回子串集合。 | √ | √ | |
split(x, delimeter, limit) | 通過指定的分隔字元拆分字串並使用limit限制字串拆分的個數,然後返回拆分後的子串集合。 | √ | √ | |
split_part(x, delimeter, part) | 使用指定的分隔字元拆分字串,並返回指定位置的內容。 | √ | √ | |
split_to_map(x, delimiter01, delimiter02) | 使用指定的第一個分隔字元拆分字串,然後再使用指定的第二個分隔字元進行第二次拆分。 | √ | √ | |
strpos(x, sub_string) | 返回目標子串在字串中的位置。與position(sub_string in x)函數等價。 | √ | √ | |
substr(x, start) | 返回字串中指定位置的子串。 | √ | √ | |
substr(x, start, length) | 返回字串中指定位置的子串,並指定子串長度。 | √ | √ | |
to_utf8(x) | 將字串轉換為UTF-8編碼格式。 | √ | √ | |
trim(x) | 刪除字串中開頭和結尾的空格。 | √ | √ | |
upper(x) | 將字串轉化為大寫形式。 | √ | √ |
chr函數
chr函數用於將ASCII碼轉換為字元。
文法
chr(x)
參數說明
參數 | 說明 |
x | ASCII碼。 |
傳回值類型
varchar類型。
樣本
判斷region
欄位值的首字母是否是c開頭,其中99為ASCII碼,代表小寫字母c。
欄位範例
region:cn-shanghai
查詢和分析語句(調試)
* | SELECT substr(region, 1, 1) = chr(99)
查詢和分析結果
codepoint函數
codepoint函數用於將字元轉換為ASCII碼。
文法
codepoint(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
integer類型。
樣本
判斷region
欄位值的首字母是否是c開頭,其中99為ASCII碼,代表小寫字母c。
欄位範例
upstream_status:200
查詢和分析語句(調試)
* | SELECT codepoint(cast (substr(region, 1, 1) AS char(1))) = 99
查詢和分析結果
concat函數
concat函數用於將多個字串拼接成一個字串。
文法
concat(x, y...)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
y | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
將region
欄位和request_method
欄位的值拼接為一個字串。
欄位範例
region:cn-shanghai time:14/Jul/2021:02:19:40
查詢和分析語句(調試)
* | SELECT concat(region, '-', time)
查詢和分析結果
from_utf8函數
from_utf8函數用於將二進位字串解碼為UTF-8編碼格式。
文法
使用預設字元U+FFFD替換無效的UTF-8字元。
from_utf8(x)
使用自訂字元替換無效的UTF-8字元。
from_utf8(x,replace_string)
參數說明
參數 | 說明 |
x | 參數值為binary類型。 |
replace_string | 用於替換的字串。只能為單個字元或空格。 |
傳回值類型
varchar類型。
樣本
length函數
length函數用於計算字串的長度。
文法
length(x)
參數說明
參數 | |
x | 參數值為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)
查詢和分析結果
levenshtein_distance函數
levenshtein_distance函數用於計算兩個字串的最小編輯距離。
文法
levenshtein_distance(x, y)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
y | 參數值為varchar類型。 |
傳回值類型
bigint類型。
樣本
查詢instance_id
欄位值和owner_id
欄位值的最小編輯距離。
欄位範例
instance_id:i-01 owner_id:owner-01
查詢和分析語句(調試)
* | SELECT levenshtein_distance(owner_id, instance_id)
查詢和分析結果
lower函數
lower函數用於將字串轉換為小寫形式。
文法
lower(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
將request_method
欄位的值轉換為小寫形式。
欄位範例
request_method:GET
查詢和分析語句(調試)
* | SELECT lower(request_method)
查詢和分析結果
lpad函數
lpad函數用於在目標字串的開頭填充指定的字元,直到指定長度後返回結果字串。
文法
lpad(x, length, lpad_string)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
length | 整數,用於指定結果字串的長度。
|
lpad_string | 新填充的字元。 |
傳回值類型
varchar類型。
樣本
將instance_id
欄位值的長度補充到10位,不足10位時,在欄位值的開頭補充0。
欄位範例
instance_id:i-01
查詢和分析語句(調試)
* | SELECT lpad(instance_id, 10, '0')
查詢和分析結果
ltrim函數
ltrim函數用於刪除字串中開頭的空格。
文法
ltrim(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
刪除region
欄位值開頭的空格。
欄位範例
region: cn-shanghai
查詢和分析語句(調試)
* | SELECT ltrim(region)
查詢和分析結果
normalize函數
normalize函數使用NFC格式將字串格式化。
文法
normalize(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
使用NFC格式將字串schön格式化。
查詢和分析語句(調試)
* | SELECT normalize('schön')
查詢和分析結果
position函數
position函數用於查詢目標子串在字串中的位置。
文法
position(sub_string in x)
參數說明
參數 | 說明 |
sub_string | 目標子串。 |
x | 參數值為varchar類型。 |
傳回值類型
int類型,從1開始。如果字串中不存在目標子串,則返回0。
樣本
查詢子串cn
在region
欄位值中位置。
欄位範例
region:cn-shanghai
查詢和分析語句(調試)
* | SELECT position('cn' in region)
查詢和分析結果
replace函數
replace函數用於刪除字串中所匹配的字元或者將字串中所匹配的字元替換為其他指定字元。
文法
刪除字串中所匹配的字元。
replace(x, sub_string)
將字串中所匹配的字元替換為其他指定字元。
replace(x, sub_string, replace_string)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
sub_string | 目標子串。 |
replace_string | 用於替換的子串。 |
傳回值類型
varchar類型。
樣本
reverse函數
reverse函數用於返回反向順序的字串。
文法
reverse(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
將request_method
欄位值反向排序。
欄位範例
request_method:GET
查詢和分析語句(調試)
* | SELECT reverse(request_method)
查詢和分析結果
rpad函數
rpad函數用於在字串的尾部填充指定的字元,直到指定長度後返回結果字串。
文法
rpad(x, length, rpad_string)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
length | 整數,用於指定結果字串的長度。
|
rpad_string | 新填充的字元。 |
傳回值類型
varchar類型。
樣本
將instance_id
欄位值的長度補充到10位,不足10位時,在欄位值的尾部補充0。
欄位範例
instance_id:i-01
查詢和分析語句(調試)
* | SELECT rpad(instance_id, 10, '0')
查詢和分析結果
rtrim函數
rtrim函數用於刪除字串中結尾的空格。
文法
rtrim(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
刪除instance_id
欄位值中結尾的空格。
欄位範例
instance_id:i-01
查詢和分析語句(調試)
* | SELECT rtrim(instance_id)
查詢和分析結果
split函數
split函數用於通過指定的分隔字元拆分字串,並返回拆分後的子串集合。
文法
通過指定的分隔字元拆分字串,並返回拆分後的子串集合。
split(x, delimeter)
通過指定的分隔字元拆分字串並使用limit限制字串拆分的個數,然後返回拆分後的子串集合。
split(x,delimeter,limit)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
delimeter | 分隔字元。 |
limit | 限制字串拆分的個數,大於0的整數。 |
傳回值類型
array類型。
樣本
split_part函數
split_part函數通過指定的分隔字元拆分字串,並返回指定位置的內容。
文法
split_part(x, delimeter, part)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
delimeter | 分隔字元。 |
part | 大於0的整數。 |
傳回值類型
varchar類型。
樣本
使用英文問號(?)拆分request_uri
欄位的值並返回第一個子串(即檔案路徑部分),然後統計不同路徑對應的請求數量。
欄位範例
request_uri: /request/path-2/file-6?name=value&age=18 request_uri: /request/path-2/file-0?name=value&age=18 request_uri: /request/path-3/file-2?name=value&age=18
查詢和分析語句(調試)
* | SELECT count(*) AS PV, split_part(request_uri, '?', 1) AS Path GROUP BY Path ORDER BY pv DESC
查詢和分析結果
split_to_map函數
split_to_map函數用於使用指定的第一個分隔字元拆分字串,然後再使用指定的第二個分隔字元進行第二次拆分。
文法
split_to_map(x, delimiter01, delimiter02)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
delimeter01 | 分隔字元。 |
delimeter02 | 分隔字元。 |
傳回值類型
map類型。
樣本
使用英文逗號(,)和英文冒號(:)拆分time
欄位的值,返回結果為MAP類型。
欄位範例
time:upstream_response_time:"80", request_time:"40"
查詢和分析語句
* | SELECT split_to_map(time, ',', ':')
查詢和分析結果
strpos函數
strpos函數用於返回目標子串在字串中的位置。與position函數等價。
文法
strpos(x, sub_string)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
sub_string | 目標子串。 |
傳回值類型
int類型,從1開始。如果字串中不存在目標子串,則返回0。
樣本
返回字母H在server_protocol
欄位值中的位置。
查詢和分析語句(調試)
* | SELECT strpos(server_protocol, 'H')
查詢和分析結果
substr函數
substr函數用於返回字串中指定位置的子串。
文法
返回字串中指定位置的子串。
substr(x, start)
返回字串中指定位置的子串,並指定子串長度。
substr(x,start,length)
參數說明
參數 | 說明 |
x | 參數值為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
查詢和分析結果
to_utf8函數
to_utf8函數用於將字串轉換為UTF-8編碼格式。
文法
to_utf8(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varbinary類型。
樣本
將字串log轉換為UTF-8編碼格式。
查詢和分析語句(調試)
* | SELECT to_utf8('log')
查詢和分析結果
trim函數
trim函數用於刪除字串中開頭和結尾的空格。
文法
trim(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
刪除instance_id
欄位值的開頭和結尾的空格。
欄位範例
instance_id: i-01
查詢和分析語句(調試)
* | SELECT trim(instance_id)
查詢和分析結果
upper函數
upper函數用於將目標字串轉化為大寫形式。
文法
upper(x)
參數說明
參數 | 說明 |
x | 參數值為varchar類型。 |
傳回值類型
varchar類型。
樣本
將region
欄位值轉換為大寫形式。
欄位範例
region:cn-shanghai
查詢和分析語句(調試)
* | SELECT upper(region)
查詢和分析結果