在雪花中转换日期

时间:2021-02-03 14:38:41

标签: date snowflake-cloud-data-platform

我正在尝试处理日期(准确地说是时间戳)并遇到了麻烦。我的要求如下。

我有一个阶段表,其中数据以 JSON 格式存储在 Variant Column 中,该列中的数据如下所示。

{
“message_body”: {
“campus_code”: “TEST”,
“campus_name”: “TEST”,
“event_type”: “TEST”,
“location_code”: “A00000”,
“location_name”: “TEST”,
“order”: {
“credit_total”: 0,
“app_version”: “1.0.9”,
“asap”: 1,
“order_datetime”: “2021-01-08 18:19:34”
}
“timezone_offset_minutes”: -360,
}
}

我有以下要求。

将日期时间转换为唯一的日期,所以我尝试了以下方法但失败了

select TO_TIMESTAMP((body:message_body:order:order_datetime), ‘yyyy-mm-dd HH24:MI:SS’) 
FROM “stage_table”

。它失败并显示以下错误消息

SQL compilation error: error line 1 at position 7 too many arguments for function [TO_TIMESTAMP(GET(GET(GET(stage_table.BODY, ‘message_body’), ‘order’), ‘order_datetime’), ‘yyyy-mm-dd HH24:MI:SS’)] expected 1, got 2

我必须从 order_datetime 中减去分钟。我必须从中减去 timezone_offset_minutes 订单日期时间

select datetime, dateadd(minute, -300, body:message_body:order:complete_datetime) 
FROM
“stage_table”

。它失败并显示以下错误消息

Timestamp ‘’ is not recognized

非常感谢任何快速帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您将提取的 order_datetime 转换为带有 ::string 的字符串,这将起作用:

with sample_table as ( 
select parse_json(replace(replace('{
“message_body”: {
“campus_code”: “TEST”,
“campus_name”: “TEST”,
“event_type”: “TEST”,
“location_code”: “A00000”,
“location_name”: “TEST”,
“order”: {
“credit_total”: 0,
“app_version”: “1.0.9”,
“asap”: 1,
“order_datetime”: “2021-01-08 18:19:34”
}
,
“timezone_offset_minutes”: -360,
}
}', '“', '"'), '”', '"')) body
)

select TO_TIMESTAMP(body:message_body:order:order_datetime::string, 'yyyy-mm-dd HH24:MI:SS')
from sample_table

-- 2021-01-08T18:19:34Z