You need to enable JavaScript to run this app.
导航

日期和时间函数

最近更新时间2024.01.30 10:05:13

首次发布时间2022.12.09 14:20:11

本文介绍日志服务支持的日期和时间函数语法及常见场景的 SQL 示例。

注意

日志服务产品架构升级,支持更丰富的检索分析功能。

  • 如果控制台提示新一代架构正式发布信息,表示您使用的是 2.0 架构,可参考检索分析(2.0 架构)中的检索概述等文档使用相关功能。
  • 如果控制台未提示新一代架构正式发布信息,表示您使用的是 1.0 架构,可参考本文档使用相关功能。

关于 1.0 架构与 2.0 架构的具体说明,请参考日志服务架构升级通知

注意事项

  • 日志服务中的日志时间戳精确到毫秒,所以配置时间格式(format)时可配置到毫秒级。
  • 日志服务默认为每条日志添加元数据字段 __time__,该字段的值为 UNIX 时间戳格式,单位为毫秒(ms)。例如时间戳 1670555662327 表示 2022-12-09 11:14:22。

函数列表

日志服务提供的日期和时间函数支持对日志中的日期和时间进行格式转换、分组聚合等处理。目前支持的函数如下:

函数名

说明

date_trunc 函数

根据您指定的时间单位截断日期或时间表达式,并按照毫秒、秒、分钟、小时、日、月或年对齐。

date_format 函数

将 Timestamp 类型的日期或时间表达式转化为指定格式的日期和时间表达式。

time_series 函数

补全查询时间窗口内缺失的数据。

date_trunc 函数

根据您指定的时间单位截断日期或时间表达式,并按照毫秒、秒、分钟、小时、日、月或年对齐。

函数语法

date_trunc(unit, x)

参数说明:

参数

说明

unit

时间单位,取值为 millisecond、second、minute、hour、day、week、month、quarter、year。详细信息请参考 unit说明

x

参数值为日期或时间表达式,UNIX 时间戳格式。

函数示例

以下示例表示按照时间字段 __time__ 中的分钟维度进行数据聚合。

* | SELECT date_trunc('minute', __time__) AS time group by time

date_format 函数

date_format 函数用于将 Timestamp 类型的日期或时间表达式转化为指定格式的日期和时间表达式。

函数语法

date_format(x, format)

参数说明:

参数

说明

x

参数值为日期或时间表达式,UNIX 时间戳格式。

format

日期和时间表达式的转换格式。详细信息请参考 format说明

函数示例

  • 按照时间字段 __time__ 中的月份进行数据聚合。

    * | SELECT date_format(__time__, 'M') AS m group by m
    
  • 将 start_time 字段转换为指定的时间格式,精确到秒。

    说明

    此处的时间字段 start_time 是 10 位的秒级时间戳为例,日志服务中的日志时间戳精确到毫秒,所以该字段需要 *1000 以转换为毫秒单位。

    * | SELECT date_format(date_trunc('second', start_time * 1000) , 'HH:mm:ss') AS time
    

time_series 函数

time_series 函数用于补全查询时间窗口内缺失的数据。

说明

time_series 函数根据固定的时间间隔对日志数据进行分组聚合、统计,使用时必须搭配 GROUP BY 语法和 ORDER BY 语法,且 ORDER BY 语法不支持倒序(DESC)排序方式。

函数语法

time_series(key, window_time, format, padding_data)

参数说明:

参数

说明

key

表示时间的字段,例如 __time__。该字段的值应为 LONG 类型的 UNIX 时间戳(毫秒)。

window_time

窗口大小,即时间间隔。单位为 s(秒)、m(分)、h(小时)、d(天)。例如 10h 表示 10 小时、5d 表示 5 天。

format

返回结果的时间格式。详细信息请参考 format 说明

padding_data

用于补全的内容。支持的设置包括:

  • 0:将缺失的字段值统一设置为 0。
  • null:将缺失的字段值统一设置为 null。
  • last:将缺失的字段值设置为上一个时间点对应的值。
  • next:将缺失的字段值设置为下一个时间点对应的值。
  • avg:将缺失的字段值设置为前后两个时间点的平均值。

函数示例

以下示例表示按照一个小时的时间粒度进行数据补全,将缺失的值统一设置为 0。

* | select time_series(__time__, '1h', 'Y-MM-dd HH:mm:ss', '0') as time, count(*) as num group by time order by time

format 说明

format

说明

E

星期的缩写。例如 Mon、Tues。

MMM

月份的缩写。例如 Jan、Feb。

M

月份。数值类型,取值范围为 1~12。

dd

每个月的第几天。十进制格式,取值范围为 01~31。

d

每个月的第几天。十进制格式,取值范围为 1~31。

H

小时,24 小时制。

h

小时,12 小时制。

mm

分钟。数值类型,取值范围为 00~59。

DDD

每年的第几天。取值范围为 001~366。

MMMM

月份的英文表达,例如 January、February。

MM

月份。数值格式,取值范围为 01~12。

a

上午或下午,即 AM 或 PM。

hh:mm:ss a

12 小时制的时间,格式为 hh:mm:ss AM/PM。

ss

秒。取值范围为 00~59。

HH:mm:ss

24 小时制的时间,格式为 HH:mm:ss。

ww

将星期日作为一周的第一天时,ww 表示每年的第几周。取值范围为 01~53。

EEEE

星期几的名称。例如 Monday、Tuesday。

u

4 位数的年份。例如 2022。

Y

4 位数的年份。例如 2022。

y

4 位数的年份。例如 2022。

G

时代代号。例如 AD(公元后) 或 BC(公元前)。

L

一年中的月份(独立形式)。

F

每周过去了几天,例如周二为 1,表示本周过去了 1 天。

k

一天中的小时数。取值范围为 0~23。

K

上午或下午的小时数。取值范围为 0~11。

unit 说明

unit

说明

millisecond

毫秒

second

minute

分钟

hour

小时

day

week

month

quarter

季度

year