来自Presto语法中的UNIX TIME

时间:2017-08-07 23:40:38

标签: sql unix casting presto

我目前正在尝试通过Unix时间戳收集介于2个日期之间的数据。我们所有的日期都存储为VARCHAR,用于使用CAST函数。

我的查询中的行显示为:

FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x') between 
CAST(d.start_date AS TIMESTAMP) and CAST(d.end_date AS TIMESTAMP)

返回错误:

  

功能unix_timestamp未注册

我也尝试过:

CAST(from_unixtime(unixtime) AS DATE) between 
CAST(start_date AS DATE) and CAST(end_date AS DATE)     

这会产生错误:

  

无法解析列unixtime

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我已经使用下面的代码将Unix时间戳转换为日期。然后,您应该可以将其与其他两个日期进行比较。

import tensorflow as tf

date_time = tf.placeholder(shape=(1,), dtype=tf.string)

split_date_time = tf.string_split(date_time, ' ')

date = split_date_time.values[0]
time = split_date_time.values[1]

split_date = tf.string_split([date], '-')
split_time = tf.string_split([time], ':')

year = split_date.values[0]
month = split_date.values[1]
day = split_date.values[2]

hours = split_time.values[0]
minutes = split_time.values[1]

with tf.Session() as sess:
    year, month, day, hours, minutes = sess.run([year, month, day, hours, minutes],
                                                feed_dict={date_time: ["2018-12-31 22:59"]})
    print("Year =", year)
    print("Month =", month)
    print("Day =", day)
    print("Hours =", hours)
    print("Minutes =", minutes)

在我使用的数据库中,unix时间戳已存储为字符串,因此我必须先将其转换为整数。

CAST(from_unixtime(unix_ts_col) AS DATE)

答案 1 :(得分:0)

Presto不支持unix_timestamp()功能。您需要将varchar转换为date

所以:

now() BETWEEN
date_parse(start_date, '%Y-%m-%d %H:%i:%s') AND
date_parse(end_date, '%Y-%m-%d %H:%i:%s')

根据情况调整日期格式字符串。

有关Presto日期和时间功能的完整列表,请参阅:https://prestodb.io/docs/current/functions/datetime.html