Snowflake cloud data platform 雪花中的以下日期转换查询不起作用

Snowflake cloud data platform 雪花中的以下日期转换查询不起作用,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,表中的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)

表中的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.
我得到这个错误 无法将“2019年3月23日20:56:22 PM”解析为格式为“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 ;
它很好用


非常感谢您的帮助。

它可能与日期字符串上的额外空格字符有关。我注意到web界面没有在错误消息中显示额外的空格字符,因此我将与开发团队联系,以修复web界面中结果的空格字符

下面是一个示例查询:

select  TO_TIMESTAMP ( '03/23/2019 20:56:22   PM', 'MM/DD/YYYY hh24:mi:ss AM');
您将在web界面中看到的错误消息:

Can't parse '03/23/2019 20:56:22 PM' as timestamp with format 'MM/DD/YYYY hh24:mi:ss AM'
如果在Snowflake CLI上运行相同的查询,则可以清楚地看到错误:

PUBLIC>select  TO_TIMESTAMP ( '03/23/2019 20:56:22   PM', 'MM/DD/YYYY hh24:mi:ss AM');
100096(22007):无法将“03/23/2019 20:56:22 PM”解析为格式为“MM/DD/YYYY hh24:mi:ss AM”的时间戳


你能核实一下你专栏里的日期吗

不允许同时使用24小时时钟和AM/PM:

'MM/DD/YYYY hh24:mi:ssAM'

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

请尝试:“MM/DD/yyyyy hh12:mi:ss AM”

如果对失败的行使用第二个查询,会发生什么情况?(比如通过其他ID值或某物查找该行)。因为这可能是一个空白问题,所以代码确实看到了一些东西,但我们不能像这样将您的列转换为datetime,然后尝试
COMPL_DATE::TIMESTAMP
“`COMPL_DATE::TIMESTAMP``没有帮助。我尝试通过使用“try_to_TIMESTAMP”及其长度来抑制错误,从而获取失败的行/数据,发现显示的长度只是预期的长度值19或22。不知道为什么它只对一些人失败。顺便说一句,当我在CLI中运行此查询时,您是对的,我得到了100096(22007):无法将'03/23/2019 20:56:22 PM'解析为格式为'MM/DD/yyyyy hh24:mi:ss AM'的时间戳错误尝试了所有可能的组合,错误保持不变-无法将'09/26/2019 05:27:56 AM'解析为格式为'MM/DD/yyyyyyy hh24:mi:ss'的时间戳('09/26/2019 05:27:56 AM','MM/DD/YYYY hh12:mi:ss AM');在我尝试时有效。请注意,我将24改为12。