最近更新时间:2026-03-26 16:37:25
本文介绍适用于分析型日志池的MySQL语法。搜索型日志池详见搜索型日志池查询语法。
日志服务支持基础的 SELECT 查询,具体查询语法如下。
select col_name...|*
[WHERE where_condition]
[GROUP BY {col_name | expr}, ... ]
[ORDER BY {col_name | expr} [ASC | DESC], ...]
[LIMIT [offset,] row_count]以下是基本语法示例。
select * where level = 'ERROR'说明:查询语法使用限制详见使用限制。
比较运算符用于对参数进行大小比较、相等性或其他关系判断,日志服务支持以下比较运算符。
运算符 | 含义 |
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
= | 等于 |
<> | 不等于 |
!= | 不等于 |
BETWEEN | 查询处于两个参数之间的数据 |
IS NULL or IS NOT NULL | 判断参数是否是Null值 |
IN or NOT IN | 判断是否包含在集合中 |
LIKE or NOT LIKE | 字符串模糊匹配 |
逻辑运算函数用于连接多个比较条件,实现复杂的数据筛选逻辑。日志服务支持以下逻辑运算函数。
运算符 | 含义 |
AND | 只有左右运算数都是true时,结果才为true |
OR | 左右运算数任一个为true,结果为true |
NOT | 右侧运算数为false时,结果才为true |
真值表
a | b | a AND b | a OR b |
TRUE | TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE | TRUE |
TRUE | NULL | NULL | TRUE |
FALSE | TRUE | FALSE | TRUE |
FALSE | FALSE | FALSE | FALSE |
FALSE | NULL | FALSE | NULL |
NULL | TRUE | NULL | TRUE |
NULL | FALSE | FALSE | NULL |
条件函数支持在查询过程中根据条件判断返回不同的结果,实现分支处理。日志服务支持以下条件函数。
语法 | 含义 | 示例 |
CASE expression WHEN expression1 THEN result1 [WHEN expression2 THEN result2] ... [WHEN expressionN THEN resultN] [ELSE result] END
CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2] ... [WHEN conditionN THEN resultN] [ELSE result] END | CASE 是一种条件表达式,有两种写法:简单 CASE 表达式和搜索 CASE 表达式。
参数说明:
|
select gender, case gender when 1 then 'male' when 0 then 'female' else 'error' end gender_str from test_case;
select gender, case when gender = 1 then 'male' when gender = 0 then 'female' end gender_str from test_case; |
if(expr1,expr2,expr3); | 若参数 参数说明:
| select if(false,1,2); |
数学计算函数用于对数值类型的字段进行算术运算、对数、取整等计算。日志服务支持以下数学计算函数。
语法 | 含义 | 示例 |
+ | 两个参数相加 | - |
- | 两个参数相减 | - |
* | 两个参数相乘 | - |
/ | 两个参数相除 | - |
% | 两个参数相除求余数 | - |
abs(x) | 返回 | select abs(-1) |
bin(x) | 将参数 参数说明:
| select bin(1024) |
ceil(x) | 向上取整, | select ceil(9.9) |
conv(x,y,z) | 对输入的参数 参数说明:
返回值的数据类型为TEXT 。 | select conv(8,10,2); |
floor(x) | 向下取整, | select floor(3.14); |
greatest(x,...) | 返回多个输入参数中的最大值。 通常情况下,返回值的数据类型与输入值相同。 该函数进行对比时遵循以下原则:
| select greatest(3,4,5,5,6); |
least(x,...) | 返回多个输入参数中的最小值。 通常情况下,返回值的数据类型与输入值相同。 该函数在对比时遵循的原则同 greatest 。 | select least(3,4,5,5,6); |
log([base],x) | 返回以 参数说明:
| select log(2,8); |
negative(x) | 对参数 | select negative(3); |
pow(x,y) | 返回参数 参数说明:
返回值的数据类型为 DOUBLE。 | select pow(2,2); |
random() | 返回一个 0(包含)到 1(不包含)之间的随机浮点数。 | select rand(); |
round(x[,n]) | 将数字四舍五入到指定的位数。 参数说明:
| select round(3.14,1); |
sign(x) | 返回参数
| select sign(3.14159); |
truncate(x,y) | 返回数值 | select truncate(3.14,1); |
聚合函数用于对一组值进行计算并返回结果。日志服务支持以下聚合函数。
语法 | 含义 | 示例 |
avg([distinct] expr) | 用于返回选中字段的平均值。 参数说明:
| select datetime, AVG(cost_time) from log_statis group by datetime; |
count([distinct] expr[,expr...]) | 计算总行数。 该函数有 3 种形式:
| select count(*) from test; select count(id) from test; select count(distinct category, supplier) from test; |
max(expr) | 返回 参数说明:
| select max(scan_rows) from log_statis group by datetime; |
max_by(x,y) | 返回与 参数说明:
| SELECT max_by(subject, score) FROM exam; |
min(expr) | 返回 参数说明:
| select min(scan_rows) from log_statis group by datetime; |
min_by(x,y) | 返回与 参数说明:
| SELECT min_by(subject, score) FROM exam; |
sum([distinct] expr) | 返回指定列所有值的总和。该函数会忽略 NULL 值,可以与 DISTINCT 运算符搭配使用。 参数说明:
| select region, sum(income) from employees group by region; |
字符串函数用于处理和转换文本数据,支持对字符串进行连接、替换、匹配等操作。日志服务支持以下字符串函数。
语法 | 含义 | 示例 |
char_length(x) | 返回字符串的长度。对于多字节字符,返回 字符 数。 | select char_length(name); |
concat(str,...) | 将多个字符串连接起来。如果参数中任意一个值是 NULL,那么返回的结果为 NULL。 | select concat(contry,'-',province,'-',city); |
concat_ws(seq,str,...) | 使用分隔符将两个或以上的字符串拼接成一个新的字符串。新字符串使用分隔符进行连接。 参数说明:
如果分隔符为 NULL,返回 NULL。 | select concat_ws('-', contry,province,city); |
ends_with(str,suffix) | 如果字符串以指定后缀结尾,返回 true,否则返回 false。任意参数为 NULL 则返回 NULL。 参数说明:
| select ends_with('ksyun', 'yun'); |
find_in_set(str,strlist) | 返回 参数说明:
| select find_in_set('b', 'a,b,c'); |
left(str,len) | 从字符串左边部分返回指定长度的字符。 参数说明:
| select left('Hello ksyun',5); |
length(str) | 返回字符串的 字节 长度。 | select length(name); |
lower(str) | 将字符串转换成小写。 | select lower(name); |
lpad(str, len, pad) | 根据指定的长度在字符串前面(左侧)追加字符。 参数说明:
| select lpad("hi", 5, "xy"); |
ltrim(str[, characters]) | 从字符串的左侧(开始部分)移除连续出现的空格或指定字符。 参数说明:
| select ltrim(' ab d'); |
money_format(num) | 将数字按照货币格式输出,整数部分每隔 3 位用逗号分隔,小数部分保留 2 位。 参数说明:
| select money_format(price); |
null_or_empty(str) | 如果字符串为空字符串或者 NULL 则返回 true,否则返回 false。 参数说明:
| select null_or_empty(null); |
parse_url(str,expr) | 从目标 URL 中提取一部分信息。 参数说明:
返回值的数据类型为 TEXT。如果输入的 URL 字符串无效,返回报错。如果未找到请求的信息,返回 NULL。 | select parse_url('http://www.ksyun.com/path?query=1', 'HOST'); |
replace(str,pattern,repl) | 将一个字符串 ( 如果任意一个输入参数为 NULL,则返回 NULL。 如果未找到符合条件的字符,则返回原始的字符串。 参数说明:
| select replace('a.b.c', '.', '+'); |
reverse(str) | 将字符串反转,返回的字符串顺序和源字符串的顺序相反。 | select reverse('hello'); |
right(str,len) | 从字符串右边部分返回指定长度的字符。 参数说明:
| right('Hello ksyun',5); |
rpad(str,len,pad) | 根据指定的长度在字符串后面(右侧)追加字符。 参数说明:
| select rpad('hi', 5, 'xy'); |
rtrim(str[, characters]) | 从字符串的右侧(结尾部分)移除连续出现的空格或指定字符。 参数说明:
| select rtrim(' ab d '); |
starts_with(str,prefix) | 如果字符串以指定前缀开头返回 1,返回 true,否则返回 false。任意参数为 NULL 则返回 NULL。 参数说明:
| select starts_with('hello world','hello'); |
trim(str[, characters]) | 从字符串的左侧和右侧移除连续出现的空格或指定的字符。 参数说明:
| select trim(' ab c '); |
upper(str) | 将字符串转换为大写形式。 参数说明:
| select upper(name); |
url_decode(str) | 将字符串从application/x-www-form-urlencoded格式转换回来。 参数说明:
返回解码后的字符串。如果输入字符串不符合 application/x-www-form-urlencoded 格式,该函数将返回错误。 | select url_decode('https%3A%2F%2Fklog.console.ksyun.com') |
url_encode(str) | 将字符串根据application/x-www-form-urlencoded格式进行编码。 参数说明:
| select url_encode('https://klog.console.ksyun.com') |
日期函数支持对日期字符串进行提取、转换、计算等处理。日志服务支持以下日期函数。
语法 | 含义 | 示例 |
add_months(date,months) | 在给定的日期上增加一个整数月,返回结果日期。 参数说明:
如果给定的日期无效或者为 NULL,则返回 NULL。 | select add_months('2022-01-01', 2); |
convert_tz(date,from_tz,to_tz) | 将给定的时间转化为另一个时区的时间。 参数说明:
时区可以使用两种格式:时区信息数据库(Time Zone Database,比如 Asia/Shanghai),或 UTC 偏移量(例如+08: 00)。
| select convert_tz(timestamp, 'Asia/Shanghai', 'America/Los_Angeles'); |
current_date() | 获取当前的日期 | select current_date(); |
current_time() | 获取当前的时间 | select current_time(); |
date(date) | 从日期或时间日期表达式中截取日期部分。 返回值的数据类型为 DATE。如果输入值为 NULL 或数据类型不合法,则返回 NULL。 | select date(timestamp); |
date_add(date,interval expr type) | 向日期添加指定的时间间隔。 参数说明:
返回 DATE 类型的值。如果输入值为空或者格式不正确,返回 NULL。 | date_add('2010-11-30 23:59:59', INTERVAL 2 DAY); |
date_diff(unit,date1,date2) | 根据指定的时间单位返回两个日期的差值。该函数按照 参数说明:
| select date_diff('minute', '2010-11-30 23:59:59', '2010-11-30 20:58:59'); |
date_format(date,format) | 将日期类型按照 当前支持最大 128 字节的字符串,如果返回值长度超过 128,则返回 NULL。 参数说明:
可以使用的格式有: %a | 缩写星期名 %b | 缩写月名 %c | 月,数值 %D | 带有英文前缀的月中的天 %d | 月的天,数值(00-31) %e | 月的天,数值(0-31) %f | 微秒 %H | 小时 (00-23) %h | 小时 (01-12) %I | 小时 (01-12) %i | 分钟,数值(00-59) %j | 年的天 (001-366) %k | 小时 (0-23) %l | 小时 (1-12) %M | 月名 %m | 月,数值(00-12) %p | AM 或 PM %r | 时间,12-小时(hh:mm:ss AM 或 PM) %S | 秒(00-59) %s | 秒(00-59) %T | 时间,24-小时 (hh:mm:ss) %U | 周 (00-53) 星期日是一周的第一天 %u | 周 (00-53) 星期一是一周的第一天 %V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 %v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 %W | 星期名 %w | 周的天 (0=星期日,6=星期六) %X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 %x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 %Y | 年,4 位 %y | 年,2 位 %% | 用于表示 % | select date_format('2009-10-04 22:23:00', '%W %M %Y'); |
date_histogram(date,interval) | 按时间分桶,将数据按照固定的时间间隔(如1小时、1天、1周等) 参数说明:
合法取值如下: d:天 h:小时 m:钟 s:秒 示例: 2d | select date_histogram(timestamp,'1m') as d ,count(*) as c group by d order by d; |
date_sub(date,interval expr type) | 从日期中减去指定的时间间隔。 参数说明:
| select date_sub('2010-11-30 23:59:59', INTERVAL 2 DAY); |
date_trunc(fmt,date) | 根据指定的精度级别 参数说明:
second截断到秒。 minute截断到分钟,秒部分归零。 hour截断到小时,分钟和秒部分归零。 day截断到天,时间部分归零。 week截断到当前星期的第一天,时间部分归零。 month截断到当前月份的第一天,时间部分归零。 quarter截断到当前季度的第一天,时间部分归零。 year截断到当前年份的第一天,时间部分归零。 | select date_trunc("minute", "2020-11-04 11:12:13"); |
day(date) | 返回指定日期中的天信息。 | select day('1987-01-31'); |
dayofweek_iso(date) | 根据 ISO 标准,计算某一个日期对应的是一周内的星期几,并返回一个整数值,范围在 | select dayofweek_iso('2023-01-01'); |
dayofmonth(date) | 获得日期中的天信息,返回值范围 1~31。 | select dayofmonth('1987-01-31'); |
dayofyear(date) | 计算指定日期为对应年中的哪一天。 | select dayofyear('2007-02-03 00:00:00'); |
days_add(date,n) | 向日期加上指定的天数。 参数说明:
如果任一参数为 NULL 或者不合法,则返回 NULL。 | select days_add('2023-10-31 23:59:59', 1); |
from_unixtime(unix_timestamp[,string_format) | 将 UNIX 时间戳转化为对应的时间格式。返回的时间格式由
参数说明:
目前 %Y:年。例:2014,1900 %m:月。例:12,09 %d:日。例:11,01 %H:时。例:23,01,12 %i:分。例:05,11 %s:秒。例:59,01 | select from_unixtime(1196440219); |
hour(date) | 获得指定日期中的小时信息。 | select hour('2018-12-31 23:59:59'); |
last_day(date,unit) | 根据指定的时间单位,返回输入的日期对应的最后一天。比如 如果没有指定时间单位,则返回该日期对应月份的最后一天。 参数说明:
| select last_day('2023-05-10', 'month'); |
makedate(year,dayOfYear) | 根据给定的年份和天数值,构造一个日期值。 参数说明:
| select makedate(2023,32); |
minute(date) | 获得指定日期中的分钟,返回值范围为 0~59。 | select minute('2018-12-31 23:59:59'); |
month(date) | 获得指定日期中的月份,返回值范围为 1~12。 | select month('1987-01-01'); |
now() | 获取当前的时间 | select now(); |
quarter(date) | 获得指定日期中的的季度,返回值范围为 1~4。 | select quarter("2022-10-09 15:59:33"); |
second(date) | 获得指定日期中的秒,返回值范围为 0~59。 | select second('2018-12-31 23:59:59'); |
str_to_date(str,format) | 按照 参数说明:
如果 | select str_to_date('2014-12-21 12:34:56', '%Y-%m-%d %H:%i:%s'); |
to_date(date) | 返回日期时间中的日期部分。 | select to_date("2020-02-02 00:00:00"); |
unix_timestamp([date][,format]) | 将 DATE 类型的值转化为 UNIX 时间戳。 如果未指定参数,则将当前的时间转化为 UNIX 时间戳。 对于在 1970-01-01 00:00:00 之前或 2038-01-19 11:14:07 之后的时间,该函数将返回 0。 参数说明:
| select unix_timestamp(); select unix_timestamp(timestamp); |
week(date[,mode]) | 计算指定日期属于一年中的第几周。 参数说明:
| select week('2007-01-01', 1); |
year(date) | 获得指定日期中的年份 | select year('1987-01-01'); |
yearweek(date) | 返回给定日期对应的年份和周数。 参数说明:
| select yearweek('2007-01-01', 0); |
纯净模式