- 类别:
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> )
TIMESTAMP_LTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )
TIMESTAMP_NTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )
TIMESTAMP_NTZ_FROM_PARTS( <date_expr>, <time_expr> )
TIMESTAMP_TZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] [, <time_zone>] )
备注
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_expr
、time_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';
使用 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 | +--------------------------------------------------+
使用 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 | +-------------------------------------------------------------+
使用 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 | +----------------------------------------------------------------------+
使用 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 | +-------------------------------------------------+
使用 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 | +---------------------------------------------------------------------------+
处理超出正常范围的值(通过指定 -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 | +------------------------------------------------+