本文介绍日志服务支持的日期和时间函数语法及常见场景的使用示例。
说明
- 日志服务中的日志时间戳精确到毫秒,所以配置时间格式(format)时可配置到毫秒级。
- 日志服务默认为每条日志添加元数据字段 __time__,该字段的值为 UNIX 时间戳格式,单位为毫秒。
- 在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time' 代表字符串,time 或 "time" 代表字段名或列名。
CURRENT_DATE 函数用于查询当前日期。
- 返回值为 Date 类型,格式为 YYYY-MM-DD。
-
CURRENT_TIME 函数用于查询当前时间和时区。
- 返回值为 Time 类型,格式为 HH:MM:SS.Ms Time_zone。
-
CURRENT_TIMESTAMP 函数用于查询当前日期、时间和时区。
- 返回值类型为 Timestamp 类型,格式为 YYYY-MM-DD HH:MM:SS.Ms Time_zone。
-
CURRENT_TIMEZONE 函数用于查询当前时区。
-
DATE 函数用于提取日期和时间中的日期部分。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 DATE 函数提取日期部分。
-
DATE_FORMAT 函数用于将 Timestamp 类型的日期或时间转化为其他指定格式。
- 按照 sli_time 字段值中的月份进行数据聚合。
-
-
DATE_PARSE 函数用于将日期和时间字符串转换为其他指定格式。
- 将 time_str 字段值转换为 %Y-%m-%d %H:%i:%s 格式。
-
-
FROM_ISO8601_DATE 函数用于将 ISO8601 格式的日期转化为 Date 类型的日期。
- 返回值为 Date 类型,格式为YYYY-MM-DD。
- 将字符串 2023-01-01 转换为 DATE 类型的日期。
-
FROM_ISO8601_TIMESTAMP 函数
FROM_ISO8601_TIMESTAMP 函数用于将 ISO8601 格式的日期和时间转化为 Timestamp 类型的日期和时间。
- 返回值为 Timestamp 类型,格式为YYYY-MM-DD HH:MM:SS.Ms Time_zone。
- 将字符串 2023-09-06T12:20:35 转换为 Timestamp 类型的日期和时间。
-
FROM_UNIXTIME 函数用于将 UNIX 时间戳转化为 Timestamp 类型的日期和时间。
- 转化为无时区的 Timestamp 类型的日期和时间。
- 转化为带时区的 Timestamp 类型的日期和时间。
- 转化为带时区的 Timestamp 类型的日期和时间,且支持设置时区偏移量。
- 返回值为 Timestamp 类型,格式为 YYYY-MM-DD HH:MM:SS.Ms 或 YYYY-MM-DD HH:MM:SS.Ms Time_zone 。
- 将 __time__ 字段的值转化为带时区的 Timestamp 类型的日期和时间。
-
-
LOCALTIME 函数用于查询当前的本地时间。
- 返回值为 Time 类型,格式为 HH:MM:SS.Ms。
-
LOCALTIMESTAMP 函数用于查询当前的本地日期和时间。
- 返回值为 Timestamp 类型,格式为YYYY-MM-DD HH:MM:SS.Ms。
-
NOW 函数用于返回当前日期和时间。NOW 函数等同于 CURRENT_TIMESTAMP 函数。
- 函数的返回值类型为 Timestamp 类型。格式为 YYYY-MM-DD HH:MM:SS.Ms Time_zone。
-
TO_ISO8601 函数用于将 Date 类型或 Timestamp 类型的日期和时间转换为 ISO8601 格式的日期和时间。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 TO_ISO8601 函数将当前的日期和时间转换为 ISO8601 格式。
-
TO_UNIXTIME 函数用于将 Timestamp 类型的日期和时间转化成 UNIX 时间戳。
-
DAY 函数用于提取日期和时间中的天数,以月为周期。DAY 函数等同于 DAY_OF_MONTH 函数。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 DAY 函数提取当前日期为本月的第几天。
-
DAY_OF_MONTH 函数用于提取日期和时间中的天数,以月为周期。DAY_OF_MONTH 函数等同于 DAY 函数。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 DAY_OF_MONTH 函数提取当前日期为本月的第几天。
-
DAY_OF_WEEK 函数用于提取日期和时间中的天数,以星期为周期。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 DAY_OF_WEEK 函数提取当前日期为本周的第几天。
-
DAY_OF_YEAR 函数用于提取日期和时间中的天数,以年为周期。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 DAY_OF_YEAR 函数提取当前日期为本年的第几天。
-
DOW 函数用于提取日期和时间中的天数,以星期为周期。DOW 函数等同于 DAY_OF_WEEK 函数。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 DOW 函数提取当前日期为本周的第几天。
-
DOY 函数用于提取日期和时间中的天数,以年为周期。DOY 函数等同于 DAY_OF_YEAR 函数。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 DOY 函数提取当前日期为本年的第几天。
-
EXTRACT 函数通过指定的 field,提取日期和时间中的日期或时间部分。
- 使用 CURRENT_DATE 函数获取当前日期,然后使用 EXTRACT 函数提取当前日期中的年份。
-
HOUR 函数用于提取日期和时间中的小时数,24 小时制。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 HOUR 函数提取当前时间的小时数。
-
MINUTE 函数用于提取日期和时间中的分钟数。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 MINUTE 函数提取当前时间的分钟数。
-
MONTH 函数用于提取日期和时间中的月份。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 MONTH 函数提取当前日期所属的月份。
-
QUARTER 函数用于返回日期所在季度。
- 返回值为 Bigint 类型,例如 1 表示第一个季度。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 QUARTER 函数计算当前日期所在季度。
-
SECOND 函数用于提取日期和时间中的秒数。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 SECOND 函数提取当前时间的秒数。
-
TIMEZONE_HOUR 函数用于计算时区的小时偏移量。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 TIMEZONE_HOUR 函数计算当前时间所属时区的小时偏移量。
-
TIMEZONE_MINUTE 函数用于计算时区的分钟偏移量。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 TIMEZONE_MINUTE 函数计算当前时间所属时区的分钟偏移量。
-
WEEK 函数用于计算目标日期是在一年中的第几周。WEEK 函数等同于 WEEK_OF_YEAR 函数。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 WEEK 函数计算当前日期是一年中的第几周。
-
WEEK_OF_YEAR 函数用于计算目标日期是在一年中的第几周。WEEK_OF_YEAR 函数等同于 WEEK 函数。
- 使用CURRENT_TIMESTAMP函数获取当前日期和时间,然后使用WEEK_OF_YEAR函数计算当前日期是一年中的第几周。
-
YEAR 函数用于提取日期和时间中的年份。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 YEAR 函数提取当前日期中的年份。
-
YEAR_OF_WEEK 函数用于返回目标日期在 ISO 周日历中的年份。YEAR_OF_WEEK 函数等同于 YOW 函数。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 YEAR_OF_WEEK 函数返回当前日期在ISO周日历中的年份。
-
YOW 函数用于返回目标日期在 ISO 周日历中的年份。YOW 函数等同于 YEAR_OF_WEEK 函数。
- 使用 CURRENT_TIMESTAMP 函数获取当前日期和时间,然后使用 YOW 函数返回当前日期在 ISO 周日历中的年份。
-
DATE_ADD 函数用于在日期和时间中增加或减去指定的时间间隔。
- 查询当前时间戳,然后减 1 得到昨天同时间点的时间戳。
-
DATE_DIFF 函数用于计算两个日期或时间点之间的差值。
- 将 time 字段值转换为 Timestamp 类型,然后计算其与当前时间的小时差。
-
-
DATE_TRUNC 函数会根据您指定的时间单位截断日期或时间,并按照毫秒、秒、分钟、小时、日、月或年对齐。支持解析的 UNIX 时间戳为秒级或者毫秒级。
- 按照字段 apply_time 中的分钟维度进行数据聚合。
-
-
DATE_TRUNC_SEC 函数会根据您指定的时间单位截断日期或时间,并按照毫秒、秒、分钟、小时、日、月或年对齐。支持解析的 UNIX 时间戳为秒级。
- 按照字段 sli_time 中的分钟维度进行数据聚合。
-
-
TIME_SERIES 函数用于补全查询时间窗口内缺失的数据。
Tip
TIME_SERIES 函数根据固定的时间间隔对日志数据进行分组聚合、统计,使用时必须搭配 GROUP BY 语法和 ORDER BY 语法,且 ORDER BY 语法不支持倒序(DESC)排序方式。
- 按照一个小时的时间粒度进行数据补全,将缺失的值统一设置为 0。
-
-
- 按照三十秒的时间粒度,根据 level 分组进行数据补全,将缺失的值统一设置为 0。
-