我在蜂巢环境中运行查询。
我有一个列有时间戳,但在表中设置了一个字符串。我尝试了以下内容:所有这些都返回Null
SELECT
,To_date(activitydate)
角色:
,cast(activitydate as timestamp)
这是表格中数据的设置方式:
感谢有关如何转换此内容的任何输入:
05/12/2017 00:00:00
SELECT
cust_id
,to_date(activitydate) activity_date
,type type_of_contact
FROM repl_task
WHERE to_date(activitydate) BETWEEN '2014-01-01' AND '2017-01-01' ;
如果我执行此操作,我的内存不足:
SELECT
cust_id
,activitydate
,SUBSTR(activitydate,4,2) AS DT
,SUBSTR(activitydate,0,2) AS MONTH
,SUBSTR(activitydate,7,4) AS YEAR
,type
FROM task
WHERE activitydate >='01/01/2016 00:00:00'
答案 0 :(得分:1)
您可以尝试将to_date()
与ISO格式的时间戳的日期部分一起使用:
SELECT
cust_id,
TO_DATE(CONCAT(SUBSTR(activitydate, 7, 4), '-',
SUBSTR(activitydate, 0, 2), '-',
SUBSTR(activitydate, 4, 2))) activity_date
type type_of_contact
FROM repl_task
WHERE
TO_DATE(CONCAT(SUBSTR(activitydate, 7, 4), '-',
SUBSTR(activitydate, 0, 2), '-',
SUBSTR(activitydate, 4, 2)))
BETWEEN '2014-01-01' AND '2017-01-01';
如果这样运行但效果不是很好,那么您应该考虑以ISO格式存储时间戳。将日期存储为文本或以非标准格式存储文本会对大多数数据库造成惩罚。
答案 1 :(得分:1)
unix_timestamp
函数将给定格式转换为unix时间戳,from_unixtime
函数将unix时间戳转换为给定格式:
hive> select from_unixtime(unix_timestamp('01/01/2016 00:00:00','MM/dd/yyyy HH:m:ss'),'yyyy-MM-dd');
OK
2016-01-01
Time taken: 0.118 seconds, Fetched: 1 row(s)