全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

日期和时间函数

更新时间:2017-12-12 17:56:07

日志服务支持时间函数和日期函数,您可以在分析语句中使用本文档中介绍的日期和时间函数。

日期时间类型

  1. unixtime:以int类型表示从1970年1月1日开始的秒数,例如1512374067 表示的时间是Mon Dec 4 15:54:27 CST 2017。日志服务每条日志中内置的时间__time__即这种类型。
  2. timestamp类型:以字符串形式表示时间,例如2017-11-01 13:30:00

日期函数

日志服务支持的常见日期函数如下:

函数名 含义 样例
current_date 当天日期 latency>100| select current_date
current_time 时:分;秒,毫秒 时区 latency>100| select current_time
current_timestamp 结合current_date + current_time的结果 latency>100| select current_timestamp
current_timezone() 返回时区 latency>100| select current_timezone()
from_iso8601_timestamp(string) 把iso8601时间转化成带时区的时间 latency>100| select from_iso8601_timestamp(iso8601)
from_iso8601_date(string) 把iso8601转化成天 latency>100| select from_iso8601_date(iso8601)
from_unixtime(unixtime) 把unix时间转化为时间戳 latency>100| select from_unixtime(1494985275)
from_unixtime(unixtime,string) 以string为时区,把unixtime转化成时间戳 latency>100| select from_unixtime (1494985275,'Asia/Shanghai')
localtime 当前时间 latency>100| select localtime
localtimestamp 当前时间戳 latency>100| select localtimestamp
now() 等同于current_timestamp -
to_unixtime(timestamp) timestamp转化成unixtime *| select to_unixtime('2017-05-17 09:45:00.848 Asia/Shanghai')

时间函数

MySQL时间格式

日志服务还支持MySQL时间格式,包括%a、%b、%y 等。

函数名 含义 样例
date_format(timestamp, format) 把timestamp转化成以format形式表示 latency>100| select date_format (date_parse('2017-05-17 09:45:00','%Y-%m-%d %H:%i:%S'), '%Y-%m-%d') group by method
date_parse(string, format) 把string以format格式解析,转化成timestamp latency>100|select date_parse('2017-05-17 09:45:00','%Y-%m-%d %H:%i:%S') group by method
格式 描述
%a 星期缩写 (Sun .. Sat)
%b 月份缩写 (Jan .. Dec)
%c 月份,数值类型 (1 .. 12) [4]
%D 每月的第几天,带上后缀 (0th, 1st, 2nd, 3rd, …)
%d 每月的第几天 (01 .. 31) [4]
%e 每月的第几天 (1 .. 31) [4]
%H 小时 (00 .. 23)
%h 小时 (01 .. 12)
%I 小时,12时制 (01 .. 12)
%i 分钟 (00 .. 59)
%j 每年的第几天 (001 .. 366)
%k 小时 (0 .. 23)
%l 小时 (1 .. 12)
%M 月份,英文 (January .. December)
%m 月份,数值 (01 .. 12) [4]
%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)
%v 每年的第几周Week (01 .. 53), where Monday is the first day of the week; used with %x
%W 星期几的名称 (Sunday .. Saturday)
%w 一周第几天 (0 .. 6), 星期日为第0天
%Y 年份
%y 年份,两位数
%% %转义字符

时间段对齐函数

日志服务支持时间段对齐函数,可以按照秒、分钟,小时、日、月、年等对齐。这个函数常用于一些按照时间进行统计的场景。

函数语法

  1. date_trunc(unit, x)

参数

Unit可选的值有(x取2001-08-22 03:04:05.000):

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

x 可以是一个timestamp类型,也可以是unix time。

date_trunc只能在按照一些固定时间间隔统计,如果我们需要按照灵活的时间维度进行统计,例如统计每5分钟的,这种场景下,我们需要按照数学取模方法进行GROUP BY。

  1. * | SELECT count(1) as pv, __time__ - __time__% 300 as minute5 group by minute5 limit 100

上述公式中的%300表示按照5分钟进行取模对齐。

日期函数样例

以下为使用时间格式的一个综合样例。

  1. *|select date_trunc('minute' , __time__) as t,
  2. truncate (avg(latency) ) ,
  3. current_date
  4. group by t
  5. order by t desc
  6. limit 60
本文导读目录