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

时间:2019-02-28 21:15:39

标签: sql presto qubole

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

我正在尝试将字符串时间戳转换为仅日期,但是没有一个选项有效。

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

我尝试了以下查询来将此 string 时间戳转换为检索日期

1. select cast(created as date) from table1
  

无法将值强制转换为日期:2017-05-26 17:23:58.0

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

无效格式:“ 2014-12-19 06:06:36.0”格式错误,显示为“ 06:06:36.0”

3. select date(created) from table1
  

无法将值强制转换为日期:2012-10-24 13:50:00.0

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

2 个答案:

答案 0 :(得分:0)

the documentation中所述,prestoDB似乎期望时间戳为'2001-08-22 03:04:05.321'格式,日期为'2001-08-22'

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

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

split_part(created, ' ', 1)

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

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

答案 1 :(得分:0)

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

  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