我很困惑。当我使用max(send_date)
时,我得到2018-02-04 23:59:51.0
。但是,当我使用max(TO_DATE(from_unixtime(UNIX_TIMESTAMP(send_date, 'yyyy-mm-dd'))))
或TO_DATE(from_unixtime(max(UNIX_TIMESTAMP(send_date, 'yyyy-mm-dd'))))
时,我会获得2018-01-31
!!
为什么?
select max(send_date) from mytable;
麻生太郎,当我使用WHERE TO_DATE(from_unixtime(UNIX_TIMESTAMP(send_date, 'yyyy-mm-dd'))) = '2018-02-04'
时,我得到了恢复0
,但事实并非如此。
答案 0 :(得分:0)
我使用的转换格式不正确。特别是,我使用yyyy-mm-dd
代替yyyy-MM-dd
更多细节可以在这里找到: http://bigdataprogrammers.com/string-date-conversion-hive/
答案 1 :(得分:0)
在Hive中使用to_date
时,您甚至不必指定该格式,因为默认情况下它会返回该格式。这是一个例子
select max(to_date(d1)), max(d1), min(to_date(d1)), min(d1) from (
select '2018-02-04 23:59:51.0' as d1
union all
select '2018-02-04 23:59:59.0' as d1
union all
select '2018-01-31 23:59:51.0' as d1
union all
select '2018-01-31 23:59:59.0' as d1
) tbl
输出
OK
2018-02-04 2018-02-04 23:59:59.0 2018-01-31 2018-01-31 23:59:51.0
Time taken: 27.547 seconds, Fetched: 1 row(s)