首页 > 解决方案 > 雪花中的以下日期转换查询不起作用

问题描述

表中的 varchar 列包含“05/13/2019 20:48:13 PM”格式的日期。它可以包含单个日期,也可以包含用管道 | 连接的多个日期。我使用此查询来获取第一个查询并尝试将其转换为时间戳。

Select (CASE WHEN  charindex('AM', COMPL_DATE)>=1 OR   charindex('PM', COMPL_DATE) >= 1
        THEN TO_TIMESTAMP ( SPLIT_PART( COMPL_DATE, '|' , 1), 'MM/DD/YYYY hh24:mi:ss AM')
        ELSE TO_TIMESTAMP ( SPLIT_PART( COMPL_DATE, '|' , 1), 'MM/DD/YYYY hh:mi:ss')
     END 
    ) from some_table.

我收到此错误 Can't parse '03/23/2019 20:56:22 PM' as timestamp with format 'MM/DD/YYYY hh24:mi:ss AM'

并不是所有行都失败。有一些行失败。但是,当我使用这些数据单独运行时,像这样 -

with tab as ( select  '03/23/2019 20:56:22 PM' COMPL_DATE from dual )
SELECT 
  (CASE WHEN  charindex('AM',COMPL_DATE)>=1 OR   charindex('PM',COMPL_DATE) >= 1
        THEN  TO_TIMESTAMP ( SPLIT_PART( COMPL_DATE, '|' , 1), 'MM/DD/YYYY hh:mi:ss AM')
        ELSE  TO_TIMESTAMP ( SPLIT_PART( COMPL_DATE, '|' , 1), 'MM/DD/YYYY hh24:mi:ss')
   END 
   ) result
FROM tab ;

它工作正常。

任何帮助表示赞赏。

标签: snowflake-cloud-data-platform

解决方案


不允许使用 24 小时制和 AM/PM 的组合:

'MM/DD/YYYY hh 24 :mi:ss AM '

HH24 - Two digits for hour (00 through 23); am/pm NOT allowed.

试试:'MM/DD/YYYY hh12:mi:ss AM'


推荐阅读