标准 SQL 中的时间函数

BigQuery 支持以下 TIME 函数。

CURRENT_TIME

CURRENT_TIME()

说明

以 TIME 对象的形式返回当前时间。

返回数据类型

TIME

示例

SELECT CURRENT_TIME() as now;

+----------------------------+
| now                        |
+----------------------------+
| 15:31:38.776361            |
+----------------------------+

TIME

1. TIME(hour, minute, second)
2. TIME(timestamp, [timezone])
3. TIME(datetime)

说明

  1. 使用表示小时、分钟和秒钟的 INT64 值构造 TIME 对象。
  2. 使用一个 TIMESTAMP 对象构造一个 TIME 对象。它支持使用可选参数来指定时区。如果未指定时区,则使用默认时区世界协调时间 (UTC)。
  3. 使用一个 DATETIME 对象构造一个 TIME 对象。

返回数据类型

TIME

示例

SELECT
  TIME(15, 30, 00) as time_hms,
  TIME(TIMESTAMP "2008-12-25 15:30:00+08", "America/Los_Angeles") as time_tstz;
+----------+-----------+
| time_hms | time_tstz |
+----------+-----------+
| 15:30:00 | 23:30:00  |
+----------+-----------+
SELECT
  TIME(DATETIME "2008-12-25 15:30:00.000000") AS time_dt;
+----------+
| time_dt  |
+----------+
| 15:30:00 |
+----------+

TIME_ADD

TIME_ADD(time_expression, INTERVAL INT64_expr part)

说明

向 TIME 对象添加 INT64_expr 个单位的 part

TIME_ADD 支持以下 part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

当值超出 00:00:00 到 24:00:00 的边界值时,此函数会自动调整。例如,如果您向 23:30:00 添加了 1 小时,返回值则为 00:30:00

返回数据类型

TIME

示例

SELECT
  TIME "15:30:00" as original_time,
  TIME_ADD(TIME "15:30:00", INTERVAL 10 MINUTE) as later;

+-----------------------------+------------------------+
| original_time               | later                  |
+-----------------------------+------------------------+
| 15:30:00                    | 15:40:00               |
+-----------------------------+------------------------+

TIME_SUB

TIME_SUB(time_expression, INTERVAL INT_expr part)

说明

从 TIME 对象中减去 INT64_expr 个单位的 part

TIME_SUB 支持以下 part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

当值超出 00:00:00 到 24:00:00 的边界值时,此函数会自动调整。例如,如果您从 00:30:00 减去了 1 小时,返回值则为 23:30:00

返回数据类型

TIME

示例

SELECT
  TIME "15:30:00" as original_date,
  TIME_SUB(TIME "15:30:00", INTERVAL 10 MINUTE) as earlier;

+-----------------------------+------------------------+
| original_date                | earlier                |
+-----------------------------+------------------------+
| 15:30:00                    | 15:20:00               |
+-----------------------------+------------------------+

TIME_DIFF

TIME_DIFF(time_expression, time_expression, part)

说明

返回两个 TIME 对象之间所指定的整个 part 间隔数。如果计算结果超过结果类型的最大值(例如两个 TIME 对象之间的微秒数之差超过 INT64 值的最大值),则引发一个错误。

TIME_DIFF 支持以下 part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

返回数据类型

INT64

示例

SELECT
  TIME "15:30:00" as first_time,
  TIME "14:35:00" as second_time,
  TIME_DIFF(TIME "15:30:00", TIME "14:35:00", MINUTE) as difference;

+----------------------------+------------------------+------------------------+
| first_time                 | second_time            | difference             |
+----------------------------+------------------------+------------------------+
| 15:30:00                   | 14:35:00               | 55                     |
+----------------------------+------------------------+------------------------+

TIME_TRUNC

TIME_TRUNC(time_expression, part)

说明

将 TIME 对象截断到 part 的粒度。

TIME_TRUNC 支持以下 part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

返回数据类型

TIME

示例

SELECT
  TIME "15:30:00" as original,
  TIME_TRUNC(TIME "15:30:00", HOUR) as truncated;

+----------------------------+------------------------+
| original                   | truncated              |
+----------------------------+------------------------+
| 15:30:00                   | 15:00:00               |
+----------------------------+------------------------+

FORMAT_TIME

FORMAT_TIME(format_string, time_object)

说明 根据指定的 format_string 设置 TIME 对象的格式。如需查看此函数支持的格式元素列表,请参阅 TIME 支持的格式元素

返回数据类型

STRING

示例

SELECT FORMAT_TIME("%R", TIME "15:30:00") as formatted_time;

+----------------+
| formatted_time |
+----------------+
| 15:30          |
+----------------+

PARSE_TIME

PARSE_TIME(format_string, string)

说明

使用 format_string 和字符串返回一个 TIME 对象。如需查看此函数支持的格式元素列表,请参阅 TIME 支持的格式元素

使用 PARSE_TIME 时,请注意以下几点:

  • 未指定的字段。 任何未指定的字段均从 00:00:00.0 开始初始化。例如,如果未指定 seconds,则默认为 00,依此类推。
  • 空格。 格式字符串中的一个或更多连续空格与 TIME 字符串中的零个或更多连续空格相匹配。此外,始终可在 TIME 字符串中使用前导空格和尾随空格(即使这些空格不在格式字符串中)。
  • 格式优先。 如果两个(或更多)格式元素的信息出现重叠,则最后一个元素通常会替换前面的所有元素。

返回数据类型

TIME

示例

SELECT PARSE_TIME("%H", "15") as parsed_time;

+-------------+
| parsed_time |
+-------------+
| 15:00:00    |
+-------------+

TIME 支持的格式元素

除非另有说明,否则使用格式字符串的 TIME 函数均支持以下元素:

格式元素 说明
%H 用十进制数 (00-23) 表示的小时数(24 小时制)。
%I 用十进制数 (01-12) 表示的小时数(12 小时制)。
%j 用十进制数 (001-366) 表示的一年中的某一天。
%k 用十进制数 (0-23) 表示的小时数(24 小时制);个位数前面附加一个空格。
%l 用十进制数 (1-12) 表示的小时数(12 小时制);个位数前面附加一个空格。
%M 用十进制数 (00-59) 表示的分钟数。
%n 换行符。
%P am 或 pm。
%p AM 或 PM。
%R 采用 %H:%M 格式显示的时间。
%r 使用 AM/PM 标记法表示的 12 小时制的时间。
%S 用十进制数 (00-60) 表示的秒数。
%T 采用 %H:%M:%S 格式表示的时间。
%t 制表符。
%X 采用 HH:MM:SS 格式表示的时间。
%% 单个 % 字符。
%E#S 具有 # 位小数精度的秒数。
%E*S 具有完整小数精度的秒数(字面量“*”)。
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面