ece*_*ulm 7 sql snowflake-cloud-data-platform
我有一个 type 列TIMESTAMP_NTZ,它包含我知道在 UTC 时区的时间戳。主要是我想转换为,TIMESTAMP_TZ因为我还有其他列,TIMESTAMP_TZ并且我希望能够执行涉及两者的操作。
我尝试TIMESTAMP_TZ通过以下方式生成:
SELECT
'2019-10-24 12:07:24.000'::timestamp_ntz as orig -- a literal timestamp_ntz
,convert_timezone('UTC', 'UTC', orig) -- the 3-args version of convert_timezone will always return a TIMESTAMP_NTZ
,convert_timezone('UTC', orig) -- the 2-args assumes that orig timezones is session's current timezone
;
Run Code Online (Sandbox Code Playgroud)
只是为了明确我想转换2019-10-24 12:07:24.000为2019-10-24 12:07:24.000 +0000
Snowflake 中是否有任何函数或运算符允许我将其视为TIMESTAMP_NTZX TIMESTAMP_TZ时区?
您可以使用两个丑陋的技巧
TIMESTAMP_TZ :使用源中的所有组件构造一个新组件TIMESTAMP_NTZ,并提供时区作为最后一个参数。这是非常冗长的。请参阅下面的示例。TIMESTAMP_NTZ字符串/VARCHAR在其末尾添加时区字符串并将整个内容重新解析为TIMESTAMP_TZ.select
'2019-10-24 12:07:24.567'::timestamp_ntz as orig
,TIMESTAMP_TZ_FROM_PARTS( year(orig), month(orig),day(orig), hour(orig), minute(orig), second(orig) , date_part(nanosecond, orig), 'UTC' )
,TO_TIMESTAMP_TZ(orig::varchar || ' +0000')
;
--
2019-10-24 12:07:24.567 -- TIMESTAMP_NTZ (UTC)
2019-10-24 12:07:24.567 +0000 -- TIMESTAMP_TZ (UTC)
2019-10-24 12:07:24.567 +0000 -- TIMESTAMP_TZ (UTC)
Run Code Online (Sandbox Code Playgroud)
您应该能够在原始 TIMESTAMP_NTZ 的末尾添加“Z”后缀,然后将其转换为 TIMESTAMP_TZ,如下所示:
-- Set timezone to something which isn't UTC
alter session set TIMEZONE = 'America/Los_Angeles';
-- Make sure the timestamp TZ output format is as you'd expect
alter session set TIMESTAMP_TZ_OUTPUT_FORMAT = "YYYY-MM-DD HH24:MI:SS.FF3 TZHTZM";
select
'2019-10-24 12:07:24.567'::timestamp_ntz as orig, -- Outputs "2019-10-24 12:07:24.567000000"
(orig::varchar||'Z')::timestamp_tz timestamp_with_tz --Outputs "2019-10-24 12:07:24.567 +0000"
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9401 次 |
| 最近记录: |