注意:我正在 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中将该时间戳转换为日期?
答案 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