为什么这个查询返回的信息比只有日期、月份和年份的信息还多?

0

【以下的问题经过翻译处理】 运行以下查询:

SELECT date_parse(Openingsdatum, '%d-%m-%Y') Openingsdatum , date_parse(REPLACE(Einddatum, '', NULL), '%d-%m-%Y') Einddatum

我会得到不同的错误。首先,我想知道为什么openingsdatum的输出不仅包括日期、月份和年份,还包括时间戳:2022-09-07 00:00:00.000。如何去除这个时间戳?

此外,Einddatum也无法正常工作。我发现只有在没有空单元格的情况下才能将字符串转换为日期格式。因此,我尝试使用replace函数,但这并不起作用。我得到的错误是:INVALID_FUNCTION_ARGUMENT:无效格式:""。

profile picture
专家
已提问 5 个月前2 查看次数
1 回答
0

【以下的回答经过翻译处理】 这是date_parse的期望输出,“解析时间戳”/“返回时间戳”,请按照这个presto文档:https://prestodb.io/docs/current/functions/datetime.html#mysql-date-functions。您可以使用此查询从时间戳中截断时间部分。

select Date(date_parse('2022-03-01','%Y-%m-%d'))

此外,请注意,Athena用于DML查询的查询执行使用presto。因此,为了编写符合Athena标准的DML查询,我们必须仅使用presto函数。

在这里,date_parse()期望一个字符串参数,并将其解析为时间戳格式。现在,由于您还有空值,这里我有一个问题,这些空值是以“”还是null的形式存在于您的表中,因为如果空值以“null”的形式存在,则date_parse应该可以正常工作。像下面这样:

select Date(date_parse(null,'%Y-%m-%d'))

但这将不会:

select Date(date_parse('','%Y-%m-%d'))

因为看到字符串'',它仅执行解析以发现它不符合标准格式,并抛出错误INVALID_FUNCTION_ARGUMENT:无效格式:“”。为了使其工作,您可以使用此查询

select CASE date_g
           WHEN '' THEN null
           ELSE Date(date_parse(date_g,'%Y-%m-%d'))
       END 
FROM Table_name
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则