时间相关¶
日期时间类型:
unixtime: 以int类型表示从1970年1月1日开始的秒数,例如1512374067
表示的时间是Mon Dec 4 15:54:27 CST 2017。
日志服务每条日志中内置的时间__time__即这种类型。
timestamp类型: 以字符串形式表示时间,例如2017-11-01 13:30:00。
日期函数¶
current_date 当天日期。 *| select current_date
current_time 当前时间
current_timestamp 结合current_date 和current_time的结果
current_timezone() 返回时区
from_unixtime(unixtime) 把unix时间转化为时间戳
from_unixtime(unixtime,string) 以string为时区,把unixtime转化成时间戳。 如:
*| select from_unixtime(1494985275,'Asia/Shanghai')
localtime 本地时间
localtimestamp 本地时间戳
now() 等同于current_timestamp。 -
to_unixtime(timestamp) timestamp转化成unixtime。 如:
*| select to_unixtime('2017-05-17 09:45:00.848 Asia/Shanghai')
// @todo
from_iso8601_timestamp(string) 把iso8601时间转化成带时区的时间。如:
* | select from_iso8601_date("2019-05-03T17:30:08+08:00")
from_iso8601_date(string) 把iso8601转化成天
时间函数¶
date_format(timestamp, format) 把timestamp转化成以format形式表示。
date_parse(string, format) 把string以format格式解析,转化成timestamp。
如:
* | select date_format (
date_parse('2017-05-17 09:45:00','%Y-%m-%d %H:%i:%S'),
'%Y-%m-%d')
* |select date_format (
date_parse(time,'%Y-%m-%d %H:%i:%S'),
'%Y-%m-%d')
支持格式 |
说明 |
示例 |
---|---|---|
%a |
星期的缩写 |
Fri |
%A |
星期的全称 |
Friday |
%b |
月份的缩写 |
Jan |
%B |
月份的全称 |
January |
%d |
每月第几天;十进制格式;范围为01~31 |
07;31 |
%e |
每月第几天;十进制格式;范围为1~31个位数字加空格 |
7;31 |
%h |
月份的缩写;与%b相同 |
Jan |
%H |
小时;24小时制 |
22 |
%I |
小时;12小时制 |
11 |
%m |
月份;十进制格式 |
08 |
%M |
分钟;十时制格式;范围为00~59 |
59 |
%n |
换行符 |
换行符 |
%p |
本地的AM(上午)或PM(下午) |
AM/PM |
%r |
12小时制的时间组合;与%I:%M:%S %p相同 |
11:59:59 AM |
%R |
小时和分钟组合;与%H:%M相同 |
23:59 |
%S |
秒数;十进制;范围为00~59 |
59 |
%t |
TAB符 |
TAB符 |
%y |
年份;十进制;不带世纪;范围为00~99 |
04;98 |
%Y |
年份;十进制 |
2004;1998 |
%C |
十进制世纪;范围为00~99 |
16 |
%j |
一年天数的十进制表示;范围为00~366 |
365 |
%u |
星期的十进制表示;范围为1~7;1 表示周一 |
2 |
%U |
每年的第几周;星期天是一周的开始范围为00~53 |
23 |
%V |
每年的第几周;星期一是一周的开始;范围为01~53 |
24 |
%w |
星期几;十进制格式 ;范围为0~6;0代表周日 |
5 |
%W |
每年的第几周;星期一是一周的开始范围为00~53 |
23 |
%c |
标准的日期、时间 |
|
%x |
标准的日期 |
|
%X |
标准的时间 |
|
%s |
Unix时间戳 |
1476187251 |
时间段对齐函数¶
date_trunc(unit, x)
x 可以是一个timestamp类型,也可以是unix time。
Unit 转化后结果
====== ===============
second 2001-08-22 03:04:05.000
minute 2001-08-22 03:04:00.000
hour 2001-08-22 03:00:00.000
day 2001-08-22 00:00:00.000
week 2001-08-20 00:00:00.000
month 2001-08-01 00:00:00.000
quarter 2001-07-01 00:00:00.000
year 2001-01-01 00:00:00.000
date_trunc只能在按照一些固定时间间隔统计,如果需要按照灵活的时间维度进行统计(例如统计每5分钟数据),需要按照数学取模方法进行GROUP BY:
% 上述公式中的%300表示按照5分钟进行取模对齐
* | SELECT
count(1) as pv, __time__ - __time__% 300 as minute5
group by minute5 limit 100
以下为使用时间格式的一个综合样例:
*|select date_trunc('minute' , __time__) as t,
truncate (avg(latency) ) ,
current_date
group by t
order by t desc
limit 60
时间间隔函数¶
时间间隔函数用来执行时间段相关的运算,如在日期中添加或减去指定的时间间隔、计算两个日期之间的时间:
date_add(unit, value, timestamp)
在timestamp上加上value个unit。如果要执行减法,value使用负值。 如:
date_add('day', -7, '2018-08-09 00:00:00') 表示8月9号之前7天
date_diff(unit, timestamp1, timestamp2)
表示timestamp1和timestamp2之间相差几个unit。
date_diff('day', '2018-08-02 00:00:00', '2018-08-09 00:00:00') = 7
该函数支持以下区间单位:
单位 说明
===== =========
millisecond 毫秒
second 秒
minute 分钟
hour 小时
day 天
week 周
month 月
quarter 季度,即三个月
year 年
时序补全函数¶
时序补全函数time_series用于处理某些时间缺少的情况:
% 函数格式:
time_series(time_column, window, format, padding_data)
% 参数说明:
参数 说明
====== ========
time_column 时间列,例如日志服务提供的默认时间字段__time__
格式为long类型或timestamp类型。
window 窗口大小,由一个数字和单位组成。单位:
s(秒)、m(分)、H (小时)、或d(天)。例如2h、5m、3d。
format MySQL时间格式,表示最终输出的格式。
padding_data 表示补全的内容,包括:
0:补零。
null:补null。
last:补上一个值。
next:补下一个值。
avg:补前后的平均值。
按照每两个小时进行格式化:
* | select
time_series(__time__, '2h', '%Y-%m-%d %H:%i:%s', '0') as stamp,
count(*) as num
from log
group by stamp
order by stamp
日志时间格式 |
示例 |
时间表达式 |
||
---|---|---|---|---|
自定义 |
2017-12-11 15:05:07 |
%Y-%m-%d %H:%M:%S |
||
自定义 |
[2017-12-11 15:05:07.012] |
[%Y-%m-%d %H:%M:%S] |
||
RFC822 |
01 Jan 06 15:04 MST |
%d %b %y %H:%M |
||
RFC822Z |
02 Jan 06 15:04 -0700 |
%d %b %y %H:%M |
||
RFC850 |
Monday |
02-Jan-06 15:04:05 MST |
%A |
%d-%b-%y %H:%M:%S |
RFC1123 |
Mon |
02 Jan 2006 15:04:05 MST |
%A |
%d-%b-%y %H:%M:%S |
RFC3339 |
2006-01-02T15:04:05Z07:00 |
%Y-%m-%dT%H:%M:%S |
||
RFC3339Nano |
2006-01-02T15:04:05.999999999Z07:00 |
%Y-%m-%dT%H:%M:%S |