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:值不能转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

不能对不可变值使用变异成员:函数调用返回不可变值 - 不确定为啥值是不可变的

C++:仅根据函数返回值类型不能实现重载

不能表示非枚举值

为啥我不能更改 QMap 中的 Qvariant 值?

VB.NET 'Char' 值不能转换为 'Integer'

为啥 out 参数不能有默认值?