类别:

日期和时间函数

TIMESTAMP_FROM_PARTS

根据各个数字部分创建时间戳。如果没有有效时区,可以使用该函数从日期表达式和时间表达式创建时间戳。

别名:

TIMESTAMPFROMPARTS

变体(及别名):

TIMESTAMP_LTZ_FROM_PARTS、TIMESTAMPLTZFROMPARTS

TIMESTAMP_NTZ_FROM_PARTS、TIMESTAMPNTZFROMPARTS

TIMESTAMP_TZ_FROM_PARTS、TIMESTAMPTZFROMPARTS

语法

TIMESTAMP_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond> ] [, <time_zone> ] )

TIMESTAMP_FROM_PARTS( <date_expr>, <time_expr> )
Copy
TIMESTAMP_LTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )
Copy
TIMESTAMP_NTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )

TIMESTAMP_NTZ_FROM_PARTS( <date_expr>, <time_expr> )
Copy
TIMESTAMP_TZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] [, <time_zone>] )
Copy

备注

TIMESTAMP_FROM_PARTS 的日期和时间表达式版本仅在 TIMESTAMP_TYPE_MAPPING 会话参数设置为 TIMESTAMP_NTZ 时有效。

实参

必填:

year

用作构建时间戳的年份的整型表达式。

month

用作构建时间戳的月份的整型表达式,其中 1 月表示为 1,12 月表示为 12

day

用作构建时间戳的日期的整型表达式,通常在 1-31 范围内。

hour

用作构建时间戳的小时的整型表达式,通常在 0-23 范围内。

minute

用作构建时间戳的分钟的整型表达式,通常在 0-59 范围内。

second

用作构建时间戳的秒钟整型表达式,通常在 0-59 范围内。

date_exprtime_expr

指定用于构建时间戳的日期和时间表达式,其中 date_expr 提供时间戳的年、月和日,time_expr 提供一天中的小时、分钟、秒钟和纳秒。仅适用于:

  • TIMESTAMP_FROM_PARTS(在 TIMESTAMP_TYPE_MAPPING 会话参数设置为 TIMESTAMP_NTZ 时)

  • TIMESTAMP_NTZ_FROM_PARTS

可选:

nanoseconds

用作构建时间戳的纳秒的整型表达式,通常在 0-999999999 范围内。

time_zone

用作构建时间戳的时区的字符串表达式(例如 America/Los_Angeles)。仅适用于:

  • TIMESTAMP_FROM_PARTS(在 TIMESTAMP_TYPE_MAPPING 会话参数设置为 TIMESTAMP_TZ 时)

  • TIMESTAMP_TZ_FROM_PARTS

使用说明

  • TIMESTAMP_FROM_PARTS 变体通常用于处理“正常”值范围内的值(例如 1-12 月、1-31 日、0-23 点等);但也可处理这些范围之外的值。这允许选择一年中的第 N 天或者一天中的第 N 秒,对于简化某些计算非常有用。

  • TIMESTAMP_FROM_PARTS 等同于 TIMESTAMP_TYPE_MAPPING 会话参数指定的变体(默认为 TIMESTAMP_NTZ)。

示例

设置控制输出格式和时区的会话变量:

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT='YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM';
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT='YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM';
ALTER SESSION SET TIMEZONE='America/New_York';
Copy

使用 TIMESTAMP_LTZ_FROM_PARTS

SELECT TIMESTAMP_LTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00);
+--------------------------------------------------+
| TIMESTAMP_LTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00) |
|--------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0400              |
+--------------------------------------------------+
Copy

使用 TIMESTAMP_NTZ_FROM_PARTS

select timestamp_ntz_from_parts(2013, 4, 5, 12, 00, 00, 987654321);
+-------------------------------------------------------------+
| TIMESTAMP_NTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00, 987654321) |
|-------------------------------------------------------------|
| 2013-04-05 12:00:00.987654321                               |
+-------------------------------------------------------------+
Copy

使用 TIMESTAMP_NTZ_FROM_PARTS 及日期和时间,而非使用年、月、日、小时等:

select timestamp_ntz_from_parts(to_date('2013-04-05'), to_time('12:00:00'));
+----------------------------------------------------------------------+
| TIMESTAMP_NTZ_FROM_PARTS(TO_DATE('2013-04-05'), TO_TIME('12:00:00')) |
|----------------------------------------------------------------------|
| 2013-04-05 12:00:00.000000000                                        |
+----------------------------------------------------------------------+
Copy

使用 TIMESTAMP_TZ_FROM_PARTS 及会话默认时区 ('America/New_York'/-0400):

select timestamp_tz_from_parts(2013, 4, 5, 12, 00, 00);
+-------------------------------------------------+
| TIMESTAMP_TZ_FROM_PARTS(2013, 4, 5, 12, 00, 00) |
|-------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0400             |
+-------------------------------------------------+
Copy

使用 TIMESTAMP_TZ_FROM_PARTS 及指定时区 ('America/Los_Angeles'/-0700);另请注意,使用 0 作为纳秒实参:

select timestamp_tz_from_parts(2013, 4, 5, 12, 00, 00, 0, 'America/Los_Angeles');
+---------------------------------------------------------------------------+
| TIMESTAMP_TZ_FROM_PARTS(2013, 4, 5, 12, 00, 00, 0, 'AMERICA/LOS_ANGELES') |
|---------------------------------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0700                                       |
+---------------------------------------------------------------------------+
Copy

处理超出正常范围的值(通过指定 -3600 秒来减去 1 小时):

select timestamp_from_parts(2013, 4, 5, 12, 0, -3600);
+------------------------------------------------+
| TIMESTAMP_FROM_PARTS(2013, 4, 5, 12, 0, -3600) |
|------------------------------------------------|
| 2013-04-05 11:00:00.000000000                  |
+------------------------------------------------+
Copy
语言: 中文