文档文档

SQL 时间和日期函数

InfluxDB 3 Core SQL 实现支持在处理时间序列数据时非常有用的时间和日期函数。

current_date

返回当前的 UTC 日期。

current_date 返回 DATE32 Arrow 类型,InfluxDB 不支持此类型。 要在 InfluxDB 中使用,请将返回值转换为时间戳或字符串

current_date() 返回值在查询时确定,并且返回相同的日期,无论函数在查询计划中的哪个位置执行。

current_date()

查看 current_date 查询示例

current_time

返回当前的 UTC 时间。

current_time() 返回值在查询时确定,并且返回相同的时间,无论函数在查询计划中的哪个位置执行。

current_time()

查看 current_time 查询示例

current_timestamp

now 的别名。

date_bin

计算时间间隔并返回最接近指定时间戳的间隔的开始时间。 使用 date_bin 通过将行分组到基于时间的“桶”或“窗口”中,并将聚合或选择器函数应用于每个窗口,来下采样时间序列数据。

例如,如果您将数据“分桶”或“窗口化”为 15 分钟间隔,则输入时间戳 2023-01-01T18:18:18Z 将更新为它所在的 15 分钟桶的开始时间:2023-01-01T18:15:00Z

date_bin(interval, expression[, origin_timestamp])
参数
  • interval:桶间隔。 支持以下间隔单位

    • 纳秒
    • 微秒
    • 毫秒
    • 分钟
    • 小时
    • 世纪
  • expression:要操作的时间表达式。 可以是常量、列或函数。

  • origin_timestamp:用于确定桶边界的起始点。 默认为 Unix 纪元。

查看 date_bin 查询示例

date_bin_gapfill

计算时间间隔并返回最接近指定时间戳的间隔的开始时间。 如果时间间隔内没有行存在,则会插入一个新行,其 time 值设置为间隔开始时间,GROUP BY 子句中的所有列都已填充,聚合列中为 null 值。

date_bin_gapfillinterpolatelocf 结合使用,以在指定的时间间隔 填充数据空白

date_bin_gapfill(interval, expression[, origin_timestamp])

date_bin_gapfill 需要 WHERE 子句中的 时间范围

参数
  • interval:桶间隔。 支持以下间隔单位

    • 纳秒
    • 微秒
    • 毫秒
    • 分钟
    • 小时
    • 世纪
  • expression:要操作的时间表达式。 可以是常量、列或函数。

  • origin_timestamp:用于确定桶边界的起始点。 默认为 Unix 纪元。

interpolate, locf

使用 date_bin_gapfill 在没有行时插入行

使用 date_bin_gapfill 填充数据空白

date_bin_wallclock

使用指定时间值的时区计算时间间隔,并返回最接近指定时间戳的间隔的开始时间。 使用 date_bin_wallclock 通过将行分组到基于时间的“桶”或“窗口”中,这些“桶”或“窗口”基于特定时区的“挂钟”时间,并将聚合或选择器函数应用于每个窗口,来下采样时间序列数据。

时区偏移

许多地区使用时区偏移(例如夏令时 (DST))。 如果挂钟时间桶在指定时区中不存在的时间开始,则时间戳将调整为与该时区一天开始时间的偏移量相同的时间。

如果挂钟时间代表该地区的一个模棱两可的时间,则行为取决于指定间隔的大小。 如果间隔大于两个可能时间戳之间的差异,则使用较早的时间戳。 否则,该函数使用与输入时间戳的 UTC 偏移量匹配的时间戳。

date_bin_wallclock(interval, expression[, origin_timestamp])
参数
  • interval:桶间隔。 支持以下间隔单位

    • 纳秒
    • 微秒
    • 毫秒
    • 分钟
    • 小时

    date_bin_wallclock 支持基于月、年或世纪的间隔。

  • expression:要操作的时间表达式。 可以是常量、列或函数。 输出时间戳使用此时间表达式的时区。

  • origin_timestamp:用于确定桶边界的起始点。 这必须是“挂钟”时间戳(无时区)。 默认为 Unix 纪元。

    避免时区不连续性中的桶

    时区偏移 会导致不连续性——时间间隔连续性中断(丢失一小时或获得一小时)——当使用 date_bin_wallclock 时,这可能会导致意外的时间戳。 避免使用导致桶落入时间不连续性内部的 intervalorigin_timestamp 组合。

    作为一般规则,使用默认的 origin_timestamp 或相对于 Unix 纪元的偏移量等于指定 interval 的起始时间戳。

    查看时区不连续性示例

查看 date_bin_wallclock 查询示例

date_bin_wallclock_gapfill

使用指定时间值的时区计算时间间隔,并返回最接近指定时间戳的间隔的开始时间。 如果时间间隔内没有行存在,则会插入一个新行,其 time 值设置为间隔开始时间,GROUP BY 子句中的所有列都已填充,聚合列中为 null 值。

date_bin_wallclock_gapfillinterpolatelocf 结合使用,以在指定的时区中的指定时间间隔 填充数据空白

时区偏移

许多地区使用时区偏移(例如夏令时 (DST))。 如果挂钟时间桶在指定时区中不存在的时间开始,则时间戳将调整为与该时区一天开始时间的偏移量相同的时间。

如果挂钟时间代表该地区的一个模棱两可的时间,则行为取决于指定间隔的大小。 如果间隔大于两个可能时间戳之间的差异,则使用较早的时间戳。 否则,该函数使用与输入时间戳的 UTC 偏移量匹配的时间戳。

date_bin_wallclock_gapfill(interval, expression[, origin_timestamp])

date_bin_wallclock_gapfill 需要 WHERE 子句中的 时间范围

参数
  • interval:桶间隔。 支持以下间隔单位

    • 纳秒
    • 微秒
    • 毫秒
    • 分钟
    • 小时

    date_bin_wallclock_gapfill 支持基于月、年或世纪的间隔。

  • expression:要操作的时间表达式。 可以是常量、列或函数。 输出时间戳使用此时间表达式的时区。

  • origin_timestamp:用于确定桶边界的起始点。 这必须是“挂钟”时间戳(无时区)。 默认为 Unix 纪元。

    避免时区不连续性中的桶

    时区偏移 会导致不连续性——时间间隔连续性中断(丢失一小时或获得一小时)——当使用 date_bin_wallclock_gapfill 时,这可能会导致意外的时间戳。 避免使用导致桶落入时间不连续性内部的 intervalorigin_timestamp 组合。

    作为一般规则,使用默认的 origin_timestamp 或相对于 Unix 纪元的偏移量等于指定 interval 的起始时间戳。

    查看时区不连续性示例

interpolate, locf

使用 date_bin_wallclock_gapfill 在没有行时插入行

使用 date_bin_wallclock_gapfill 填充数据空白

date_trunc

将时间戳值截断为指定的精度。

date_trunc(precision, expression) 
参数
  • precision:要截断到的时间精度。 支持以下精度

    • 小时
    • 分钟
  • expression:要操作的时间表达式。 可以是常量、列或函数。

别名
  • datetrunc

查看 date_trunc 查询示例

datetrunc

date_trunc 的别名。

date_format

to_char 的别名。

date_part

返回日期的指定部分,作为整数。

date_part(part, expression)
参数
  • part:要返回的日期部分。 支持以下日期部分

    • week (一年中的第几周)
    • day (一个月中的第几天)
    • 小时
    • 分钟
    • millisecond
    • microsecond
    • nanosecond
    • dow (星期几)
    • day (一年中的第几天)
  • expression:要操作的时间表达式。 可以是常量、列或函数。

别名
  • datepart

查看 date_part 查询示例

datepart

date_part 的别名。

extract

从时间值返回子字段作为整数。 类似于 date_part,但参数不同。

extract(field FROM source)
参数
  • field:要返回的日期部分或字段。 支持以下日期字段

    • week (一年中的第几周)
    • day (一个月中的第几天)
    • 小时
    • 分钟
    • millisecond
    • microsecond
    • nanosecond
    • dow (星期几)
    • day (一年中的第几天)
  • source:要操作的源时间表达式。 可以是常量、列或函数。

查看 extract 查询示例

from_unixtime

将整数转换为 RFC3339 时间戳格式 (YYYY-MM-DDT00:00:00.000000000Z)。 输入解析为 Unix 纳秒时间戳,并返回相应的 RFC3339 时间戳。

from_unixtime(expression)
参数
  • expression:要操作的整数表达式。 可以是常量、列或函数,以及算术运算符的任意组合。

to_unixtime

查看 from_unixtime 查询示例

make_date

使用组成部分(年、月、日)返回日期。

make_date 返回 DATE32 Arrow 类型,InfluxDB 不支持此类型。 要在 InfluxDB 中使用,请将返回值转换为时间戳或字符串

make_date(year, month, day)
参数
  • year:制作日期时要使用的年份。 可以是常量、列或函数,以及算术运算符的任意组合。
  • month:制作日期时要使用的月份。 可以是常量、列或函数,以及算术运算符的任意组合。
  • day:制作日期时要使用的天数。 可以是常量、列或函数,以及算术运算符的任意组合

查看 make_date 查询示例

now

返回当前的 UTC 时间戳。

now() 返回值在查询时确定,并且返回相同的时间戳,无论函数在查询计划中的哪个位置执行。

now()
别名

查看 now 查询示例

today

current_date 的别名。

to_char

基于 Rust Chrono 格式字符串 返回日期、时间、时间戳或持续时间的字符串表示形式。

与 PostgreSQL TO_CHAR() 函数不同,此函数不支持数字格式。

to_char(expression, format)
参数
  • expression:要操作的表达式。 可以是常量、列或函数,结果为日期、时间、时间戳或持续时间。
  • format:用于转换表达式的 Rust Chrono 格式字符串
别名

查看 to_char 查询示例

to_date

将值转换为日期 (YYYY-MM-DD)。 支持字符串和数字类型作为输入。 字符串解析为 YYYY-MM-DD,除非指定了其他格式。 数字值被解释为自 Unix 纪元 以来的天数。

to_date 返回 DATE32 Arrow 类型,InfluxDB 不支持此类型。 要在 InfluxDB 中使用,请将返回值转换为时间戳或字符串

to_date(expression[, ..., format_n])
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。
  • format_n:可选的 Rust strftime 模式,用于解析字符串表达式。 格式按照它们出现的顺序尝试。 该函数返回从第一个成功解析的格式的时间戳。 如果没有格式成功解析,则该函数返回错误。

查看 to_date 查询示例

to_local_time

将带时区的时间戳转换为不带时区的时间戳(无偏移或时区信息)。 此函数考虑了夏令时 (DST) 等时移。

to_local_time()date_bin()date_bin_gapfill 结合使用,以基于本地时区而不是 UTC 生成窗口边界。

to_local_time(expression)
参数
  • expression:要操作的时间表达式。 可以是常量、列或函数。

查看 to_local_time 查询示例

查看带时区偏移的 to_local_time 查询示例

查看带 date_binto_local_time 查询示例

to_timestamp

将值转换为 RFC3339 时间戳格式 (YYYY-MM-DDT00:00:00Z)。 支持时间戳、整数和无符号整数类型作为输入。 整数和无符号整数解析为 Unix 纳秒时间戳,并返回相应的 RFC3339 时间戳。

to_timestamp(expression)
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。

查看 to_timestamp 查询示例

to_timestamp_micros

将值转换为 RFC3339 微秒时间戳格式 (YYYY-MM-DDT00:00:00.000000Z)。 支持时间戳、整数和无符号整数类型作为输入。 整数和无符号整数解析为 Unix 微秒时间戳,并返回相应的 RFC3339 时间戳。

to_timestamp_micros(expression[, ..., format_n])
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。
  • format_n:可选的 Rust strftime 模式,用于解析字符串表达式。 格式按照它们出现的顺序尝试。 该函数返回从第一个成功解析的格式的时间戳。 如果没有格式成功解析,则该函数返回错误。

查看 to_timestamp_micros 查询示例

查看 to_timestamp_micros 带字符串格式解析的示例

to_timestamp_millis

将值转换为 RFC3339 毫秒时间戳格式 (YYYY-MM-DDT00:00:00.000Z)。 支持时间戳、整数和无符号整数类型作为输入。 整数和无符号整数解析为 Unix 毫秒时间戳,并返回相应的 RFC3339 时间戳。

to_timestamp_millis(expression[, ..., format_n])
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。
  • format_n:可选的 Rust strftime 模式,用于解析字符串表达式。 格式按照它们出现的顺序尝试。 该函数返回从第一个成功解析的格式的时间戳。 如果没有格式成功解析,则该函数返回错误。

查看 to_timestamp_millis 查询示例

查看 to_timestamp_millis 带字符串格式解析的示例

to_timestamp_nanos

将值转换为 RFC3339 纳秒时间戳格式 (YYYY-MM-DDT00:00:00.000000000Z)。 支持时间戳、整数和无符号整数类型作为输入。 整数和无符号整数解析为 Unix 纳秒时间戳,并返回相应的 RFC3339 时间戳。

to_timestamp_nanos(expression[, ..., format_n])
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。
  • format_n:可选的 Rust strftime 模式,用于解析字符串表达式。 格式按照它们出现的顺序尝试。 该函数返回从第一个成功解析的格式的时间戳。 如果没有格式成功解析,则该函数返回错误。

查看 to_timestamp_nanos 查询示例

查看 to_timestamp_nanos 带字符串格式解析的示例

to_timestamp_seconds

将值转换为 RFC3339 秒时间戳格式 (YYYY-MM-DDT00:00:00Z)。 支持时间戳、整数和无符号整数类型作为输入。 整数和无符号整数解析为 Unix 秒时间戳,并返回相应的 RFC3339 时间戳。

to_timestamp_seconds(expression[, ..., format_n]) 
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。
  • format_n:可选的 Rust strftime 模式,用于解析字符串表达式。 格式按照它们出现的顺序尝试。 该函数返回从第一个成功解析的格式的时间戳。 如果没有格式成功解析,则该函数返回错误。

查看 to_timestamp_seconds 查询示例

查看 to_timestamp_seconds 带字符串格式解析的示例

to_unixtime

将值转换为自 Unix 纪元 以来的秒数。 支持字符串、时间戳和浮点数作为输入。 如果未提供 Rust Chrono 格式字符串,则字符串解析为 RFC3339Nano 时间戳

to_unixtime(expression[, ..., format_n])
参数
  • expression:要操作的表达式。 可以是常量、列或函数,以及算术运算符的任意组合。
  • format_n:可选的 Rust strftime 模式,用于解析字符串表达式。 格式按照它们出现的顺序尝试。 该函数返回从第一个成功解析的格式的时间戳。 如果没有格式成功解析,则该函数返回错误。

from_unixtime

查看 to_unixtime 查询示例

查看 to_unixtime 带字符串格式解析的示例

tz

将时间戳转换为提供的时区。 如果未提供第二个参数,则默认为 UTC。

tz(time_expression[, timezone])
参数
  • time_expression:要操作的时间。 可以是常量、列或函数,以及算术运算符的任意组合。
  • timezone:要将值转换为的 时区字符串。 默认为 'UTC'。 该函数返回转换为指定时区的时间戳。 如果传递了不正确的时区字符串或提供了错误的数据类型,则该函数返回错误。

查看 tz 查询示例

查看来自入门数据的 tz 查询示例

tz 和 AT TIME ZONE 之间的差异

当输入时间戳没有时区时,tzAT TIME ZONE 不同。

  • 当对没有时区的输入时间戳(InfluxDB 中的默认行为)使用 AT TIME ZONE 运算符时,该运算符返回相同的时间戳,但带有时间区偏移量(也称为“挂钟”时间)——例如

    '2024-01-01 00:00:00'::TIMESTAMP AT TIME ZONE 'America/Los_Angeles'
    
    -- Returns
    2024-01-01T00:00:00-08:00
    
  • 当对带有时间区的输入时间戳使用时,tz() 函数和 AT TIME ZONE 运算符都返回转换为指定时区的时间的时间戳——例如

    '2024-01-01T00:00:00-00:00' AT TIME ZONE 'America/Los_Angeles'
    tz('2024-01-01T00:00:00-00:00', 'America/Los_Angeles')
    
    -- Both return
    2023-12-31T16:00:00-08:00
    
  • tz() 始终将输入时间戳转换为指定的时区。 如果输入时间戳没有时区,则该函数假定它是 UTC 时间戳——例如

    tz('2024-01-01 00:00:00'::TIMESTAMP, 'America/Los_Angeles')
    -- Returns
    2023-12-31T16:00:00-08:00
    
    tz('2024-01-01T00:00:00+1:00', 'America/Los_Angeles')
    -- Returns
    2023-12-31T15:00:00-08:00
    

查看 tz::timestamp 比较


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、只读副本、增强的安全性以及数据压缩功能,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层级可供非商业家庭或业余爱好者使用。

更多信息,请查看