雅典娜日期格式无法将字符串转换为日期格式

时间:2017-09-14 10:21:30

标签: date presto amazon-athena

尝试了以下语法,它们都没有帮助将字符串类型列转换为日期

select INVC_,APIDT,APDDT from APAPP100 limit 10
select current_date, APIDT,APDDT from APAPP100 limit 10
select date_format( b.APIDT, '%Y-%m-%d') from APAPP100 b
select CAST( b.APIDT AS date) from APAPP100 b
select date(b.APIDT) from APAPP100 b
select convert(datetime, b.APIDT) from APAPP100 b
select date_parse(b.APIDT, '%Y-%m-%d') from APAPP100 b
select str_to_date(b.APIDT) from APAPP100 b

4 个答案:

答案 0 :(得分:6)

将字符串解析为日期的正确查询将是date_parse

这将导致以下查询:

select date_parse(b.APIDT, '%Y-%m-%d') from APAPP100 b

prestodb docs: 6.10. Date and Time Functions and Operators

答案 1 :(得分:3)

如果您需要在其中转换具有单个日期格式的列,@ jens walter的答案非常好。我有一种情况,如果一个列包含多种不同的日期格式并且仍然能够转换它,那么它很有用。

以下查询支持包含多种不同格式的日期的源列。

SELECT b.APIDT, 
   Coalesce(
     try(date_parse(b.APIDT, '%Y-%m-%d %H:%i:%s')),
     try(date_parse(b.APIDT, '%Y/%m/%d %H:%i:%s')),
     try(date_parse(b.APIDT, '%d %M %Y %H:%i:%s')),
     try(date_parse(b.APIDT, '%d/%m/%Y %H:%i:%s')),
     try(date_parse(b.APIDT, '%d-%m-%Y %H:%i:%s')),
     try(date_parse(b.APIDT, '%Y-%m-%d')),
     try(date_parse(b.APIDT, '%Y/%m/%d')),
     try(date_parse(b.APIDT, '%d %M %Y'))
   ) 
FROM APAPP100 b

DATE_PARSE函数执行日期转换。

TRY函数在发生错误时返回NULL来处理错误。

COALESCE函数获取第一个非空值。

有更深入的撰写here(我的博客)。

答案 2 :(得分:3)

这有效-

cast(from_iso8601_timestamp(createdat) as date)

答案 3 :(得分:0)

SELECT   b.APIDT,
         b.Appppppppp,
         date_diff('day',current_date, date(b.APIDT)) AS Duedays
FROM xyz100 a
WHERE regexp_like(b.apidt, '[0-9]{4}-[0-9]{2}-[0-9]{2}')

WHERE NOT regexp_like(b.apidt, '[0-9]{4}-[0-9]{2}-[0-9]{2}') 排除垃圾日期