Presto sql 函数 date_parse 在特定日期 (1960-01-01) 失败

Presto sql function date_parse fails for specific date (1960-01-01)

如何解决 date_parse('1960-01-01', '%Y-%m-%d')

的这个 presto sql 错误

此函数适用于其他日期。

这是由于 Presto 对时间戳的建模方式存在一个长期存在的问题。长话短说,时间戳的实现不符合 SQL 规范,它错误地尝试将它们视为“时间点”或“即时”值并在时区规范内解释它们。对于某些日期和时区规则,由于夏令时转换等原因,这些值未定义。

这是 fixed in recent versions of Trino (formerly known as Presto SQL),因此您可能需要更新。

顺便说一句,您可以使用 date() 函数或将值转换为 date:

varchar 转换为 date
trino> select date('1960-01-01');
   _col0
------------
 1960-01-01
(1 row)

trino> select cast('1960-01-01' as date);
   _col0
------------
 1960-01-01
(1 row)