类别:

转换函数

TRY_TO_TIMESTAMP / TRY_TO_TIMESTAMP_*

TO_TIMESTAMP / TO_TIMESTAMP_* 的特殊版本,它执行相同的操作(即将输入表达式转换为时间戳),但支持错误处理(即,如果无法执行转换,它将返回 NULL 值而不是引发错误)。

有关更多信息,请参阅 错误处理转换函数

备注

根据 TIMESTAMP_TYPE_MAPPING 会话参数,TRY_TO_TIMESTAMP 映射到其他某个时间戳函数。参数默认值为 TIMESTAMP_NTZ,因此 TRY_TO_TIMESTAMP 默认映射到 TRY_TO_TIMESTAMP_NTZ。

另请参阅:

TO_TIMESTAMP / TO_TIMESTAMP_*

语法

timestampFunction ( <string_expr> [, <format> ] )
timestampFunction ( '<integer>' )
Copy

其中:

timestampFunction ::=
    TRY_TO_TIMESTAMP | TRY_TO_TIMESTAMP_LTZ | TRY_TO_TIMESTAMP_NTZ | TRY_TO_TIMESTAMP_TZ
Copy

实参

必填:

其中之一:

string_expr

计算结果可能为 TIMESTAMP (TIMESTAMP_NTZ、TIMESTAMP_LTZ 或 TIMESTAMP_TZ)的字符串。

'integer'

计算结果为包含整数的字符串的表达式,例如 '15000000'。根据字符串的大小,它可以解释为秒、毫秒、微秒或纳秒。有关详细信息,请参阅 使用说明

可选:

format

string_exprAUTO 的格式说明符。有关更多信息,请参阅 转换函数中的日期和时间格式

默认值为 TIMESTAMP_INPUT_FORMAT 会话参数的当前值(默认为 AUTO)。

返回

返回值的数据类型是 TIMESTAMP 数据类型。默认情况下,数据类型为 TIMESTAMP_NTZ。您可以设置会话参数 TIMESTAMP_TYPE_MAPPING,从而对此进行更改。

使用说明

  • 对于带有时区的时间戳,TIMEZONE 参数的设置会影响返回值。返回的时间戳位于会话的时区中。

  • 输出中时间戳的显示格式由与函数对应的时间戳输出格式决定 (TIMESTAMP_OUTPUT_FORMATTIMESTAMP_LTZ_OUTPUT_FORMATTIMESTAMP_NTZ_OUTPUT_FORMATTIMESTAMP_TZ_OUTPUT_FORMAT)。

  • 如果输入参数的格式是包含整数的字符串:

    • 将字符串转换为整数后,该整数被视为自 Unix 纪元时间 (1970-01-01 00:00:00.000000000 UTC) 开始后的秒数、毫秒数、微秒数或纳秒数。

      • 如果整数小于 31536000000(一年中的毫秒数),则该值被视为秒数。

      • 如果该值大于或等于 31536000000 且小于 31536000000000,则该值被视为毫秒数。

      • 如果该值大于或等于 31536000000000 且小于 31536000000000000,则该值被视为微秒数。

      • 如果该值大于或等于 31536000000000000,则该值被视为纳秒数。

    • 如果评估多行(例如,如果输入内容是包含多行的表的列名),则每个值都将单独得到检查,以确定该值表示的是秒数、毫秒数、微秒数还是纳秒数。

  • 使用 TO_TIMESTAMP_NTZ 或 TRY_TO_TIMESTAMP_NTZ 函数,转换带有时区信息的时间戳时,时区信息会丢失。如果将时间戳转换回带有时区信息的时间戳(例如,通过使用 TO_TIMESTAMP_TZ 函数),则时区信息不可恢复。

示例

此示例使用 TRY_TO_TIMESTAMP:

SELECT TRY_TO_TIMESTAMP('2024-01-15 12:30:00'), TRY_TO_TIMESTAMP('Invalid');
Copy
+-----------------------------------------+-----------------------------+
| TRY_TO_TIMESTAMP('2024-01-15 12:30:00') | TRY_TO_TIMESTAMP('INVALID') |
|-----------------------------------------+-----------------------------|
| 2024-01-15 12:30:00.000                 | NULL                        |
+-----------------------------------------+-----------------------------+

有关将输入表达式转换为时间戳的示例,请参阅 TO_TIMESTAMP / TO_TIMESTAMP_*

语言: 中文