vin*_*ham 2 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
Run Code Online (Sandbox Code Playgroud)
小智 11
这有效 -
cast(from_iso8601_timestamp(createdat) as date)
Run Code Online (Sandbox Code Playgroud)
将字符串解析为日期的正确查询将是date_parse.
这将导致以下查询:
select date_parse(b.APIDT, '%Y-%m-%d') from APAPP100 b
Run Code Online (Sandbox Code Playgroud)
prestodb docs: 6.10.日期和时间函数和运算符
如果您需要转换其中具有单一日期格式的列,则@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
Run Code Online (Sandbox Code Playgroud)
DATE_PARSE函数执行日期转换。
如果确实发生错误,则TRY函数通过返回NULL来处理错误。
COALESCE函数采用第一个非空值。
有一个更深入的写了这里(我的博客)。
| 归档时间: |
|
| 查看次数: |
22487 次 |
| 最近记录: |