Presto/SQL - 将字符串时间戳转换为日期会引发错误

Presto/SQL - Converting string timestamp to date throws error

注意:我是 运行 我在 Qubole 的 presto 和 sql 命令引擎中的查询。

我正在尝试将我的字符串时间戳转换为日期,但 none 个选项正在运行。

我的字符串时间戳看起来像 2017-03-29 10:32:28.0 我想让它像 2017-03-29

我已尝试通过以下查询将此 字符串 时间戳转换为检索日期

1. select cast(created as date) from table1

Value cannot be cast to date: 2017-05-26 17:23:58.0

2. select cast(from_iso8601_timestamp(created) as date) from table1

Invalid format: "2014-12-19 06:06:36.0" is malformed at " 06:06:36.0"

3. select date(created) from table1

Value cannot be cast to date: 2012-10-24 13:50:00.0

如何将此时间戳转换为 presto/sql 中的日期?

the documentation 中的解释而言,prestoDB 似乎期望时间戳格式为 '2001-08-22 03:04:05.321',日期格式为 '2001-08-22'

一种解决方案是使用 a string function 在转换之前提取字符串的相关部分。我们知道日期部分位于字符串中第一个space之前,所以.

如果您需要日期部分作为 字符串数据类型:

split_part(created, ' ', 1)

如果您需要日期部分作为 日期数据类型:

cast(split_part(created, ' ', 1) as date)

您可以尝试使用以下解决方案之一:

  SELECT 
  '2017-03-29 10:32:28.0' AS input_string,
  DATE(date_parse('2017-03-29 10:32:28.0', '%Y-%m%-%d %H:%i:%s.%f')) AS solution_1,
  DATE(try_cast('2017-03-29 10:32:28.0' as timestamp)) AS solution_2