我目前正在尝试通过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
有什么建议吗?
答案 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