INVALID_CAST_ARGUMENT:值不能转换为日期
Posted
技术标签:
【中文标题】INVALID_CAST_ARGUMENT:值不能转换为日期【英文标题】:INVALID_CAST_ARGUMENT: Value cannot be cast to date 【发布时间】:2022-01-13 22:50:21 【问题描述】:我在 Athena 表中有列作为时间 -> 字符串
我正在尝试转换为日期时间,如下所示:
SELECT
"source"
, "account"
, CAST(time as date) Datetime
FROM
"testdata"
它给了我以下错误:
INVALID_CAST_ARGUMENT: Value cannot be cast to date: 2021-11-28T08:04:21Z
【问题讨论】:
【参考方案1】:您的时间戳看起来像是使用 ISO 8601 格式化的,而 Athena 有一个功能:from_iso8601_timestamp
SELECT
source,
account,
from_iso8601_timestamp("time") AS datetime
FROM testdata
如果您只想要日期部分,您可以将函数的结果转换为日期:
SELECT
source,
account,
CAST(from_iso8601_timestamp("time") AS DATE) AS "date"
FROM testdata
【讨论】:
【参考方案2】:使用DATE_PARSE
:
SELECT source, account,
DATE_PARSE(time, '%Y-%m-%dT%H:%i:%sZ') AS Datetime
FROM testdata;
【讨论】:
结果会是 UTC 时间格式吗? 在 SQL 中,日期实际上没有任何内部“格式”,而是以二进制形式存储。我不知道 Presto 如何处理时区。你可以研究一下。以上是关于INVALID_CAST_ARGUMENT:值不能转换为日期的主要内容,如果未能解决你的问题,请参考以下文章
不能对不可变值使用变异成员:函数调用返回不可变值 - 不确定为啥值是不可变的