雪花 - 将字符串转换为日期时间

问题描述

我正在使用雪花,我将日期作为这种格式的字符串

'2021-04-01 08:00:05.577209+00'

我想将其转换为 DateTime。我使用以下代码来执行此操作(我首先从每个字符串中修剪 '+00')。但是我认为我定义的有点错误,所以我不断收到错误

TO_TIMESTAMP_NTZ(left(ts,len(ts)-4),'YYYY-MM-DD HH24:MI:SS.FF'),

解决方法

为什么要去掉 +00?就这样做:

select to_timestamp_ntz('2021-04-01 08:00:05.577209+00','YYYY-MM-DD HH24:MI:SS.FF+00')
,
  1. 最好使用 left(ts,len( ts)-3) 而不是 left(ts,len( ts)-4) 来修剪最后 3 个字符。

  2. 您能否检查您的数据并确保它是“2021-04-01 08:00:05.577209+00”,因为它按预期工作(同时测试):

    选择 ts, 左(ts,len(ts)-3)修剪, TO_TIMESTAMP_NTZ(left(ts,len(ts)-3),'YYYY-MM-DD HH24:MI:SS.FF') 结果 从值 ('2021-04-01 08:00:05.577209+00') tmp (ts);

结果:

+-------------------------------+----------------------------+-------------------------+
|              TS               |          TRIMMED           |         RESULT          |
+-------------------------------+----------------------------+-------------------------+
| 2021-04-01 08:00:05.577209+00 | 2021-04-01 08:00:05.577209 | 2021-04-01 08:00:05.577 |
+-------------------------------+----------------------------+-------------------------+
,

我已经找到了我的问题的答案。我正在从 Azure Data Lake 上的 CSV 文件中读取数据,但我没有注意到列中的引号。当我删除它们时,一切正常。