标准 SQL 中的时间戳函数

BigQuery 支持以下 TIMESTAMP 函数。

注意:如果发生溢出,这些函数会返回运行时错误;结果值受到所定义的日期和时间戳最小值/最大值限制。

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP()

说明

英文括号是可选项。此函数在围绕着插入闰秒的 20 个小时的时段中对闰秒进行涂抹 (smearing) 处理。CURRENT_TIMESTAMP() 生成一个 TIMESTAMP 值,该值是连续非模糊的值,每分钟刚好 60 秒,并且在闰秒时不重复值。

支持的输入类型

不适用

结果数据类型

TIMESTAMP

示例

SELECT CURRENT_TIMESTAMP() as now;

+-------------------------------+
| now                           |
+-------------------------------+
| 2016-05-16 18:12:47.145482+00 |
+-------------------------------+

EXTRACT

EXTRACT(part FROM timestamp_expression [AT TIME ZONE tz_spec])

说明

返回与提供的 timestamp_expression 中指定的 part 相对应的 INT64 值。

允许的 part 值包括:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK
  • DAY
  • DAYOFYEAR
  • WEEK:返回 [0, 53] 范围内的日期的周数。一周从星期日开始,一年第一个星期日之前的日期属于第 0 周。
  • WEEK(<WEEKDAY>):返回 timestamp_expression 属于一年中的第几周,范围为 [0, 53]。一周从 WEEKDAY 开始。一年之中第一个 WEEKDAY 之前的 datetime 属于第 0 周。WEEKDAY 的有效值包括 SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAY
  • ISOWEEK:以 ISO 8601 格式返回 datetime_expression 属于一年之中的第几周。ISOWEEK 从星期一开始算起。返回值的范围为 [1, 53]。每个 ISO 格式年份的第一个 ISOWEEK 从公历年第一个星期四之前的星期一开始算起。
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR:以 ISO 8601 格式返回周编号年份,即包含 date_expression 所属一周的星期四的公历年)。
  • DATE
  • DATETIME
  • TIME

返回的值会截掉低位时间段。例如,提取秒数时,EXTRACT 会截掉毫秒值和微秒值。

如需了解如何指定时区,请参阅时区定义

返回数据类型

通常是 INT64。如果 partDATE,则返回 DATE

示例

在以下示例中,EXTRACT 返回了 DAY 时间部分对应的值。

SELECT EXTRACT(DAY
  FROM TIMESTAMP "2008-12-25 15:30:00" AT TIME ZONE "America/Los_Angeles")
  AS the_day;

+------------+
| the_day    |
+------------+
| 25         |
+------------+

在以下示例中,EXTRACT 返回了与时间戳的一列中不同的时间部分相对应的值。

WITH Timestamps AS (
  SELECT TIMESTAMP '2005-01-03 12:34:56' AS timestamp UNION ALL
  SELECT TIMESTAMP '2007-12-31' UNION ALL
  SELECT TIMESTAMP '2009-01-01' UNION ALL
  SELECT TIMESTAMP '2009-12-31' UNION ALL
  SELECT TIMESTAMP '2017-01-02' UNION ALL
  SELECT TIMESTAMP '2017-05-26'
)
SELECT
  timestamp,
  EXTRACT(ISOYEAR FROM timestamp) AS isoyear,
  EXTRACT(ISOWEEK FROM timestamp) AS isoweek,
  EXTRACT(YEAR FROM timestamp) AS year,
  EXTRACT(WEEK FROM timestamp) AS week
FROM Timestamps
ORDER BY timestamp;

+------------------------+---------+---------+------+------+
| timestamp              | isoyear | isoweek | year | week |
+------------------------+---------+---------+------+------+
| 2005-01-03 12:34:56+00 | 2005    | 1       | 2005 | 1    |
| 2007-12-31 00:00:00+00 | 2008    | 1       | 2007 | 52   |
| 2009-01-01 00:00:00+00 | 2009    | 1       | 2009 | 0    |
| 2009-12-31 00:00:00+00 | 2009    | 53      | 2009 | 52   |
| 2017-01-02 00:00:00+00 | 2017    | 1       | 2017 | 1    |
| 2017-05-26 00:00:00+00 | 2017    | 21      | 2017 | 21   |
+------------------------+---------+---------+------+------+

在以下示例中,timestamp_expression 出现在星期日。EXTRACT 使用从星期日开始的周数计算第一列,并使用从星期一开始的周数计算第二列。

WITH table AS (SELECT TIMESTAMP('2017-11-05 00:00:00') AS timestamp)
SELECT
  timestamp,
  EXTRACT(WEEK(SUNDAY) FROM timestamp) AS week_sunday,
  EXTRACT(WEEK(MONDAY) FROM timestamp) AS week_monday
FROM table;

+------------------------+-------------+---------------+
| timestamp              | week_sunday | week_monday   |
+------------------------+-------------+---------------+
| 2017-11-05 00:00:00+00 | 45          | 44            |
+------------------------+-------------+---------------+

字符串

STRING(timestamp_expression[, timezone])

说明

timestamp_expression 转换为 STRING 数据类型。支持使用可选参数来指定时区。如需了解如何指定时区,请参阅时区定义

返回数据类型

STRING

示例

SELECT STRING(TIMESTAMP "2008-12-25 15:30:00", "America/Los_Angeles") as string;

+-------------------------------+
| string                        |
+-------------------------------+
| 2008-12-25 07:30:00-08        |
+-------------------------------+

TIMESTAMP

TIMESTAMP(
  string_expression[, timezone] |
  date_expression[, timezone] |
  datetime_expression[, timezone]
)

说明

  • string_expression[, timezone]:将 STRING 表达式转换为 TIMESTAMP 数据类型。string_expression 必须包含一个时间戳字面量。 如果 string_expression 在时间戳字面量中包含时区,请勿明确包含 timezone 参数。
  • date_expression[, timezone]:将 DATE 对象转换为 TIMESTAMP 数据类型。
  • datetime_expression[, timezone]:将 DATETIME 对象转换为 TIMESTAMP 数据类型。

此函数支持使用可选参数来指定时区。如果您未指定时区,则系统会使用默认时区(即世界协调时间 (UTC))。

返回数据类型

TIMESTAMP

示例

这些示例中指定了时区。

SELECT CAST(
  TIMESTAMP("2008-12-25 15:30:00", "America/Los_Angeles") AS STRING
) AS timestamp_str;

+------------------------+
| timestamp_str          |
+------------------------+
| 2008-12-25 23:30:00+00 |
+------------------------+
SELECT CAST(
  TIMESTAMP("2008-12-25 15:30:00 America/Los_Angeles") AS STRING
) AS timestamp_str_timezone;

+------------------------+
| timestamp_str_timezone |
+------------------------+
| 2008-12-25 23:30:00+00 |
+------------------------+
SELECT CAST(
  TIMESTAMP(DATETIME "2008-12-25 15:30:00", "America/Los_Angeles") AS STRING
) AS timestamp_datetime;

+------------------------+
| timestamp_datetime     |
+------------------------+
| 2008-12-25 23:30:00+00 |
+------------------------+
SELECT CAST(
  TIMESTAMP(DATE "2008-12-25", "America/Los_Angeles") AS STRING
) AS timestamp_date;

+------------------------+
| timestamp_date         |
+------------------------+
| 2008-12-25 08:00:00+00 |
+------------------------+

在这些示例中,假设默认时区为 UTC。

SELECT CAST(
  TIMESTAMP("2008-12-25 15:30:00") AS STRING
) AS timestamp_str;

+------------------------+
| timestamp_str          |
+------------------------+
| 2008-12-25 15:30:00+00 |
+------------------------+
SELECT CAST(
  TIMESTAMP(DATE "2008-12-25") AS STRING
) AS timestamp_date;

+------------------------+
| timestamp_date         |
+------------------------+
| 2008-12-25 00:00:00+00 |
+------------------------+

TIMESTAMP_ADD

TIMESTAMP_ADD(timestamp_expression, INTERVAL int64_expression date_part)

说明

向时间戳中添加 int64_expression 单位的 date_part,与时区无关。

TIMESTAMP_ADD 支持以下 date_part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR。等于 60 MINUTE
  • DAY。等于 24 HOUR

返回数据类型

TIMESTAMP

示例

SELECT
  TIMESTAMP "2008-12-25 15:30:00 UTC" as original,
  TIMESTAMP_ADD(TIMESTAMP "2008-12-25 15:30:00 UTC", INTERVAL 10 MINUTE) AS later;

+------------------------+------------------------+
| original               | later                  |
+------------------------+------------------------+
| 2008-12-25 15:30:00+00 | 2008-12-25 15:40:00+00 |
+------------------------+------------------------+

TIMESTAMP_SUB

TIMESTAMP_SUB(timestamp_expression, INTERVAL int64_expression date_part)

说明

从时间戳中减去 int64_expression 个单位的 date_part,与时区无关。

TIMESTAMP_SUB 支持以下 date_part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR。等于 60 MINUTE
  • DAY。等于 24 HOUR

返回数据类型

TIMESTAMP

示例

SELECT
  TIMESTAMP "2008-12-25 15:30:00 UTC" as original,
  TIMESTAMP_SUB(TIMESTAMP "2008-12-25 15:30:00 UTC", INTERVAL 10 MINUTE) AS earlier;

+------------------------+------------------------+
| original               | earlier                |
+------------------------+------------------------+
| 2008-12-25 15:30:00+00 | 2008-12-25 15:20:00+00 |
+------------------------+------------------------+

TIMESTAMP_DIFF

TIMESTAMP_DIFF(timestamp_expression, timestamp_expression, date_part)

说明

返回两个时间戳之间完整指定的 date_part 间隔数。第一个 timestamp_expression 代表较晚的日期;如果第一个 timestamp_expression 早于第二个 timestamp_expression,则输出为负值。如果计算结果溢出结果类型的精度(例如以纳秒表示的两个时间戳之间的差值溢出了 INT64 值所能达到的精度),则会抛出一个错误。

TIMESTAMP_DIFF 支持以下 date_part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR。等于 60 MINUTE
  • DAY。等于 24 HOUR

返回数据类型

INT64

示例

SELECT
  TIMESTAMP "2010-07-07 10:20:00 UTC" as later_timestamp,
  TIMESTAMP "2008-12-25 15:30:00 UTC" as earlier_timestamp,
  TIMESTAMP_DIFF(TIMESTAMP "2010-07-07 10:20:00 UTC",
    TIMESTAMP "2008-12-25 15:30:00 UTC", HOUR) AS hours;

+------------------------+------------------------+-------+
| later_timestamp        | earlier_timestamp      | hours |
+------------------------+------------------------+-------+
| 2010-07-07 10:20:00+00 | 2008-12-25 15:30:00+00 | 13410 |
+------------------------+------------------------+-------+

在以下示例中,第一个时间戳出现在第二个时间戳之前,从而产生负输出。

SELECT TIMESTAMP_DIFF(TIMESTAMP "2018-08-14", TIMESTAMP "2018-10-14", DAY);

+---------------+
| negative_diff |
+---------------+
| -61           |
+---------------+

TIMESTAMP_TRUNC

TIMESTAMP_TRUNC(timestamp_expression, date_part[, time_zone])

说明

将时间戳截断为 date_part 的粒度。

TIMESTAMP_TRUNC 支持以下 date_part 值:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>):timestamp_expression 截断到前一周的边界,一周开始于 WEEKDAYWEEKDAY 的有效值包括 SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAY
  • ISOWEEK:将 timestamp_expression 截断至上一个 ISO 8601 格式周的边界值。 从星期一开始算起。每个 ISO 格式年份的第一个 ISOWEEK 都包含对应公历年的第一个星期四。任何早于此日期的 date_expression 均会截断至上一个星期一。
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR:将 timestamp_expression 截断至上一个 ISO 8601 格式周编号年份的边界值。ISO 格式年份的边界值是星期四属于相应公历年的第一周的星期一。

TIMESTAMP_TRUNC 函数支持可选的 time_zone 参数。此参数适用于以下 date_parts

  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>)
  • MONTH
  • QUARTER
  • YEAR

如果您想要在截断操作过程中使用默认时区 (UTC) 以外的时区,请使用此参数。

TIMESTAMP 截断到 MINUTEHOUR 时,TIMESTAMP_TRUNC 会确定 在指定(或默认)时区中的民用时间,并且从该 中减去分钟和秒(截断到 HOUR 时)或减去秒(截断到 MINUTE 时)。虽然这在大多数情况下都可以提供直观的结果,但在临近夏令时转换时,小时并不一致,因此结果会不太直观。

返回数据类型

TIMESTAMP

示例

SELECT
  TIMESTAMP_TRUNC(TIMESTAMP '2008-12-25 15:30:00', DAY, 'UTC') as utc,
  TIMESTAMP_TRUNC(TIMESTAMP '2008-12-25 15:30:00', DAY, 'America/Los_Angeles') as la;

+------------------------+------------------------+
| utc                    | la                     |
+------------------------+------------------------+
| 2008-12-25 00:00:00+00 | 2008-12-25 08:00:00+00 |
+------------------------+------------------------+

在以下示例中,timestamp_expression 的时区偏移为 +12。第一列以 UTC 时间显示 timestamp_expression。第二列使用以星期一开始的周显示 TIMESTAMP_TRUNC 的输出。由于 timestamp_expression 是 UTC 时间的星期天,TIMESTAMP_TRUNC 会将其截断到上一个星期一。第三列显示使用可选的时区定义参数 'Pacific/Auckland' 的同一函数。这里,该函数根据新西兰夏令时截断 timestamp_expression,在这个时区内,它是星期一。

SELECT
  timestamp,
  TIMESTAMP_TRUNC(timestamp, WEEK(MONDAY)) AS utc_truncated,
  TIMESTAMP_TRUNC(timestamp, WEEK(MONDAY), 'Pacific/Auckland') AS nzdt_truncated
FROM (SELECT TIMESTAMP('2017-11-06 00:00:00+12') AS timestamp);

+------------------------+------------------------+------------------------+
| timestamp              | utc_truncated          | nzdt_truncated         |
+------------------------+------------------------+------------------------+
| 2017-11-05 12:00:00+00 | 2017-10-30 00:00:00+00 | 2017-11-05 11:00:00+00 |
+------------------------+------------------------+------------------------+

在以下示例中,原始的 timestamp_expression 属于公历 2015 年。但对日期部分 ISOYEAR 执行 TIMESTAMP_TRUNC 会将 timestamp_expression 截断到 ISO 格式年份的开端,而非公历年的开端。公历年 2015 年的第一个星期四是 2015-01-01,因此 ISO 格式年份 2015 年开始于上一个星期一,也就是 2014-12-29。因此,ISO 格式的 timestamp_expression 2015-06-15 00:00:00+00 的上一个年份边界值是 2014-12-29。

SELECT
  TIMESTAMP_TRUNC('2015-06-15 00:00:00+00', ISOYEAR) AS isoyear_boundary,
  EXTRACT(ISOYEAR FROM TIMESTAMP '2015-06-15 00:00:00+00') AS isoyear_number;

+------------------------+----------------+
| isoyear_boundary       | isoyear_number |
+------------------------+----------------+
| 2014-12-29 00:00:00+00 | 2015           |
+------------------------+----------------+

FORMAT_TIMESTAMP

FORMAT_TIMESTAMP(format_string, timestamp[, time_zone])

说明

根据指定的 format_string 设置时间戳格式。

如需查看此函数支持的格式元素列表,请参阅 TIMESTAMP 支持的格式元素

返回数据类型

STRING

示例

SELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2008-12-25 15:30:00", "America/Los_Angeles")
  AS formatted;

+--------------------------+
| formatted                |
+--------------------------+
| Thu Dec 25 07:30:00 2008 |
+--------------------------+
SELECT FORMAT_TIMESTAMP("%b-%d-%Y", TIMESTAMP "2008-12-25 15:30:00")
  AS formatted;

+-------------+
| formatted   |
+-------------+
| Dec-25-2008 |
+-------------+
SELECT FORMAT_TIMESTAMP("%b %Y", TIMESTAMP "2008-12-25 15:30:00")
  AS formatted;

+-------------+
| formatted   |
+-------------+
| Dec 2008    |
+-------------+

PARSE_TIMESTAMP

PARSE_TIMESTAMP(format_string, string[, time_zone])

说明

使用 format_string 以及时间戳的字符串表示来返回 TIMESTAMP 对象。

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

  • 未指定的字段。任何未指定的字段在初始化时均以 1970-01-01 00:00:00.0 为准。此初始化值使用函数的时区参数(如果存在)所指定的时区。如果未提供此参数,则初始化值使用默认时区“世界协调时间 (UTC)”。例如,如果未指定年份,则默认为 1970,依此类推。
  • 名称不区分大小写。MondayFebruary 等名称不区分大小写。
  • 空格。格式字符串中的一个或更多连续空格与时间戳字符串中的零个或更多连续空格相匹配。此外,始终可在时间戳字符串中使用前导空格和尾随空格(即使这些空格不在格式字符串中)。
  • 格式优先级。如果两个(或更多)格式元素的信息出现重叠(例如 %F%Y 均对年份有影响),则最后一个元素通常会替换前面的所有元素,但也存在一些例外情况(请参阅 %s%C%y 的说明)。

返回数据类型

TIMESTAMP

示例

SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008", "America/Los_Angeles") as parsed;

+------------------------+
| parsed                 |
+------------------------+
| 2008-12-25 15:30:00+00 |
+------------------------+

TIMESTAMP_SECONDS

TIMESTAMP_SECONDS(int64_expression)

说明

int64_expression 解释为自 1970-01-01 00:00:00 UTC 后的秒数。

返回数据类型

TIMESTAMP

示例

SELECT TIMESTAMP_SECONDS(1230219000) as timestamp;

+------------------------+
| timestamp              |
+------------------------+
| 2008-12-25 15:30:00+00 |
+------------------------+

TIMESTAMP_MILLIS

TIMESTAMP_MILLIS(int64_expression)

说明

int64_expression 解释为从 1970-01-01 00:00:00 UTC 开始计算的毫秒数。

返回数据类型

TIMESTAMP

示例

SELECT TIMESTAMP_MILLIS(1230219000000) as timestamp;

+------------------------+
| timestamp              |
+------------------------+
| 2008-12-25 15:30:00+00 |
+------------------------+

TIMESTAMP_MICROS

TIMESTAMP_MICROS(int64_expression)

说明

int64_expression 解释从 1970-01-01 00:00:00 UTC 开始计算的微秒数。

返回数据类型

TIMESTAMP

示例

SELECT TIMESTAMP_MICROS(1230219000000000) as timestamp;

+------------------------+
| timestamp              |
+------------------------+
| 2008-12-25 15:30:00+00 |
+------------------------+

UNIX_SECONDS

UNIX_SECONDS(timestamp_expression)

说明

返回从 1970-01-01 00:00:00 UTC 开始计算的秒数。截断更高级别的精度。

返回数据类型

INT64

示例

SELECT UNIX_SECONDS(TIMESTAMP "2008-12-25 15:30:00 UTC") as seconds;

+------------+
| seconds    |
+------------+
| 1230219000 |
+------------+

UNIX_MILLIS

UNIX_MILLIS(timestamp_expression)

说明

返回从 1970-01-01 00:00:00 UTC 开始计算的毫秒数。截断更高级别的精度。

返回数据类型

INT64

示例

SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00 UTC") as millis;

+---------------+
| millis        |
+---------------+
| 1230219000000 |
+---------------+

UNIX_MICROS

UNIX_MICROS(timestamp_expression)

说明

返回从 1970-01-01 00:00:00 UTC 开始计算的微秒数。截断更高级别的精度。

返回数据类型

INT64

示例

SELECT UNIX_MICROS(TIMESTAMP "2008-12-25 15:30:00 UTC") as micros;

+------------------+
| micros           |
+------------------+
| 1230219000000000 |
+------------------+

TIMESTAMP 支持的格式元素

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

格式元素 说明
%A 星期几的全名。
%a 星期几的缩写名称。
%B 月份的全名。
%b 或 %h 月份的缩写名称。
%C 用十进制数 (00-99) 表示的世纪(年份除以 100 并截断为整数)。
%c 日期和时间表示格式为 %a %b %e %T %Y。
%D 采用 %m/%d/%y 格式的日期。
%d 用十进制数 (01-31) 表示的月份中的某一天。
%e 用十进制数 (1-31) 表示的月份中的某一天;个位数前面附加一个空格。
%F 采用 %Y-%m-%d 格式的日期。
%G 用十进制数表示的带有世纪信息的 ISO 8601 格式年份。每个 ISO 格式年份开始于公历年的第一个星期四之前的星期一。 请注意,%G 和 %Y 可能会在公历年的边界值附近产生不同的结果,其中公历年和 ISO 格式年份可能会有所不同。
%g 用十进制数 (00-99) 表示的带有世纪信息的 ISO 8601 格式年份。每个 ISO 格式年份开始于公历年的第一个星期四之前的星期一。请注意,%G 和 %Y 可能会在公历年边界值附近产生不同的结果,其中公历年和 ISO 格式年份可能会有所不同。
%H 用十进制数 (00-23) 表示的小时数(24 小时制)。
%I 用十进制数 (01-12) 表示的小时数(12 小时制)。
%j 用十进制数 (001-366) 表示的一年中的某一天。
%k 用十进制数 (0-23) 表示的小时数(24 小时制);个位数前面附加一个空格。
%l 用十进制数 (1-12) 表示的小时数(12 小时制);个位数前面附加一个空格。
%M 用十进制数 (00-59) 表示的分钟数。
%m 用十进制数 (01-12) 表示的月份。
%n 换行符。
%P am 或 pm。
%p AM 或 PM。
%Q 用十进制数 (1-4) 表示的季度。
%R 采用 %H:%M 格式表示的时间。
%r 使用 AM/PM 标记法表示的 12 小时制的时间。
%S 用十进制数 (00-60) 表示的秒数。
%s 从 1970-01-01 00:00:00 UTC 开始计算的秒数。无论 %s 出现在字符串的哪个位置,始终替换所有其他格式元素。如果出现多个 %s 元素,则以最后一个元素为准。
%T 采用 %H:%M:%S 格式表示的时间。
%t 制表符。
%U 用十进制数 (00-53) 表示的一年中的周数(星期日算作一周的第一天)。
%u 用十进制数 (1-7) 表示的星期名称(星期一算作一周的第一天)。
%V 用十进制数 (01-53) 表示的一年中的 ISO 8601 格式周数(星期一算作一周的第一天)。如果包含 1 月 1 日的那一周有 4 天或超过 4 天属于新的一年,则该周为第 1 周;否则为上一年的第 53 周,而下一周为新年的第 1 周。
%W 用十进制数 (00-53) 表示的一年的周数(星期一算作一周的第一天)。
%w 用十进制数 (0-6) 表示的星期名称(星期日算作一周的第一天)。
%X 采用 HH:MM:SS 格式表示的时间。
%x 采用 MM/DD/YY 格式表示的日期。
%Y 用十进制数表示的四位数的年份。
%y 用十进制数 (00-99) 表示的不带世纪信息的年份(可选用前导零)。可与 %C 混合使用。如果未指定 %C,则 00-68 年属于 2000 年代,而 69-99 年属于 1900 年代。
%Z 时区名称。
%z 根据情况采用 +HHMM 或 -HHMM 格式表示与本初子午线的偏移量,其中正值表示格林威治东区。
%% 单个 % 字符。
%Ez 与 RFC 3339 兼容的数字时区(+HH:MM 或 -HH:MM)。
%E#S 具有 # 位小数精度的秒数。
%E*S 具有完整小数精度的秒数(字面量“*”)。
%E4Y 四个字符的年份 (0001 ... 9999)。注意:%Y 将生成尽量多的字符数以完整显示年份。

时区定义

某些日期和时间戳函数可用于替换默认时区并指定其他时区。您可以通过提供时区名称(例如:America/Los_Angeles)或相对于世界协调时间 (UTC) 的时区偏离值(例如:-08)来指定时区。

如果您选择使用时区偏离值,请使用以下格式:

(+|-)H[H][:M[M]]

以下时间戳是等效的,因为对于指定日期和时间,America/Los_Angeles的时区偏离值为 -08

SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00 America/Los_Angeles") as millis;
SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00-08:00") as millis;