Documentation

SQL 时间和日期函数

InfluxDB Cloud无服务器SQL实现支持在处理时间序列数据时非常有用的时间和日期函数。

当前日期

返回当前的UTC日期。

current_date 返回一个 DATE32 Arrow 类型,这在 InfluxDB 中不被支持。要与 InfluxDB 一起使用,将返回值转换为时间戳或字符串

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

current_date()

查看 current_date 查询示例

当前时间

返回当前的UTC时间。

current_date 返回一个 TIME64 Arrow 类型,这在 InfluxDB 中不被支持。 要在 InfluxDB 中使用,将返回值转换为字符串

当前时间(current_time())的返回值是在查询时确定的,无论函数在查询计划中的何时执行,都返回相同的时间。

current_time()

查看 current_time 查询示例

日期分箱

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

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

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

    • nanoseconds
    • microseconds
    • milliseconds
    • seconds
    • minutes
    • hours
    • days
    • weeks
    • months
    • years
    • century
  • expression: 操作的时间表达式。 可以是常量、列或函数。

  • origin_timestamp: 用于确定区间边界的起始点。默认值是Unix纪元。

查看 date_bin 查询示例

日期分箱填充

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

使用 date_bin_gapfillinterpolatelocf填充数据中的空缺 在指定的时间间隔。

date_bin_gapfill(interval, expression[, origin_timestamp])

date_bin_gapfill 需要 时间边界WHERE 子句中。

参数:
  • 间隔: 盒子间隔。支持以下间隔单位:

    • nanoseconds
    • microseconds
    • milliseconds
    • seconds
    • minutes
    • hours
    • days
    • weeks
    • months
    • years
    • century
  • expression: 操作的时间表达式。 可以是常量、列或函数。

  • origin_timestamp: 用于确定区间边界的起始点。默认值是Unix纪元。

interpolate, locf

使用 date_bin_gapfill 在没有行存在时插入行

使用 date_bin_gapfill 来填补数据中的空缺

日期_分箱_墙钟

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

时区变化

许多地区使用时区变化(例如夏令时(DST))。 如果墙钟时间段在指定的时区中开始的时间不存在,则时间戳会调整为该时区当天开始的时间的相同偏移量。

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

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

    • nanoseconds
    • microseconds
    • milliseconds
    • seconds
    • minutes
    • hours
    • days
    • weeks

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

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

  • origin_timestamp: 用于确定区间边界的起始点。这必须是一个“墙钟”时间戳(没有时区)。默认是 Unix 纪元。

    避免时区不连续中出现的箱子

    时区变化 导致 不连续性——时间间隔的连续性中断(失去一个小时或获得一个小时)——这可能导致在使用 date_bin_wallclock 时出现意外的时间戳。避免使用导致箱体落入时间不连续性的 intervalorigin_timestamp 的组合。

    一般来说,使用默认的 origin_timestamp 或者一个相对于Unix纪元的偏移时间戳,该偏移量等于您指定的 interval

    查看时区不连续性示例

查看 date_bin_wallclock 查询示例

日期_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 子句中提供 时间范围

参数:
  • 间隔: 盒子间隔。支持以下间隔单位:

    • nanoseconds
    • microseconds
    • milliseconds
    • seconds
    • minutes
    • hours
    • days
    • weeks

    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(precision, expression) 
参数:
  • precision: 截断到的时间精度。 以下精度被支持:

    • year
    • month
    • week
    • day
    • hour
    • minute
    • second
  • expression: 操作的时间表达式。 可以是常量、列或函数。

别名
  • datetrunc

查看 date_trunc 查询示例

日期截断

date_trunc的别名。

日期部分

以整数形式返回指定的日期部分。

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

    • year
    • month
    • week (week of the year)
    • day (day of the month)
    • hour
    • minute
    • second
    • millisecond
    • microsecond
    • nanosecond
    • dow (day of the week)
    • day (day of the year)
  • expression: 操作的时间表达式。 可以是常量、列或函数。

别名
  • datepart

查看 date_part 查询示例

日期部分

date_part 的别名。

提取

以整数形式返回时间值的子字段。 与 date_part 类似,但参数不同。

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

    • year
    • month
    • week (week of the year)
    • day (day of the month)
    • hour
    • minute
    • second
    • millisecond
    • microsecond
    • nanosecond
    • dow (day of the week)
    • day (day of the year)
  • source: 操作的源时间表达式。 可以是常量、列或函数。

查看 extract 查询示例

从unix时间戳转换

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

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

to_unixtime

查看 from_unixtime 查询示例

创建日期

根据组成部分(年份、月份、日期)返回一个日期。

make_date 返回一个 DATE32 Arrow 类型,这在 InfluxDB 中不受支持。 要与 InfluxDB 一起使用,将返回值转换为时间戳或字符串

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

查看 make_date 查询示例

现在

返回当前的UTC时间戳。

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

now()

查看 now 查询示例

今天

current_date 的别名。

到字符

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

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

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

查看 to_char 查询示例

转日期

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

to_date 返回一个 DATE32 Arrow 类型,这在 InfluxDB 中不被支持。要与 InfluxDB 一起使用,将返回值转换为时间戳或字符串

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

查看 to_date 查询示例

转换为本地时间

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

使用 to_local_time()date_bin()date_bin_gapfill 生成基于本地时区而非UTC的窗口边界。

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

查看 to_local_time 查询示例

查看 to_local_time 查询示例,带有时区偏移

查看 to_local_time 查询示例与 date_bin

到时间戳

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

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

查看 to_timestamp 查询示例

将时间戳转换为微秒

将值转换为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 示例,使用字符串格式解析

到时间戳毫秒

将值转换为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 示例,使用字符串格式解析

到时间戳纳秒

将值转换为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 示例,使用字符串格式解析

到时间戳(秒)

将值转换为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 示例,使用字符串格式解析

转换为 Unix 时间戳

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

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

from_unixtime

查看 to_unixtime 查询示例

查看 to_unixtime 示例,使用字符串格式解析

时区

将时间戳转换为提供的时区。如果没有提供第二个参数,默认使用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 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看:

InfluxDB 云端无服务器