有没有一种方法可以从varchar

时间:2020-07-14 18:01:10

标签: sql presto

我有一个包含以下列的数据集

time           date
1310        2020-06-01
1425        2020-06-22
1640        2020-06-29

我想要的最终输出是日期时间格式的列,看起来像这样

datetime
2020-06-01 13:10:00.000
2020-06-22 14:25:00.000
2020-06-29 16:40:00.000

到目前为止,我已经使用以下命令以所需的方式格式化输出

CONCAT(date_string,  ' ', substring(barstarttime, 1, 2), ':', substring(barstarttime, 3, 2), ':00.000'))

但是,我没有成功将其更改为日期时间或时间戳。

有功能可以帮助我吗?

谢谢

3 个答案:

答案 0 :(得分:1)

使用SUBSTR从时间字符串获取小时和分钟。然后将相应的间隔添加到日期。

我不知道Presto是否允许使用间隔值功能。请尝试:

select
  date + 
  interval substr(time, 1, 2) hour +
  interval substr(time, 3, 2) minute
from mytable;

如果这不起作用,请尝试以下方法:

select
  date + 
  ((interval '1' hour) * cast(substr(time, 1, 2) as integer)) +
  ((interval '1' minute) * cast(substr(time, 3, 2) as integer))
from mytable;

如上所述,我不认识Presto。您甚至可能必须先将日期转换为时间戳:

  cast(date as timestamp) +
  ...

答案 1 :(得分:1)

您可以使用date_parse功能。

select date_parse(cast(date as varchar) || ' ' || time, '%Y-%m-%d %H%i') from 
(values ('1300', date '2020-06-01')) as t(time, date)

答案 2 :(得分:0)

您可以在下面使用以便转换为时间戳

select *,
cast(date_col as timestamp) as ts
from T