博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive:处理时间的函数
阅读量:7228 次
发布时间:2019-06-29

本文共 1458 字,大约阅读时间需要 4 分钟。

UNIX时间戳概念

从格林尼治时间1970-01-01 00:00:00开始,到现在经过的秒数。

时间戳是一个32位的整数(所以UNIX时间戳最多表示到2037年左右)。

因为UNIX时间戳只是一个秒数,一个UNIX时间戳在不同时区看来,时间是不同的。

如UNIX时间戳0,在0时区看来是1970-01-01 00:00:00,在东八区看来是1970-01-01 08:00:00。

补充一点:由于spark sql中TimestampType类型表示的是java.sql.Timestamp类型,而后者的构造函数接受的参数是以毫秒为单位的,所以注意进行转换。

如unix_timestamp函数返回的值如果要直接用cast转为时间戳类型,记得要乘以1000:

select cast(unix_timestamp()*1000 as timestamp);2018-07-27 10:00:31

Hive中处理时间相关的函数

-- 返回UNIX时间戳代表的(当前时区的)时间,默认格式如下。select from_unixtime(1);1970-01-01 08:00:01select from_unixtime(1 ,'yyyyMMdd hh:mm:ss');19700101 08:00:01-- 获取当前时间的UNIX时间戳(时区无关的),返回值bigint(对应spark中Long)。select unix_timestamp();1532655119--转换(当前时区)时间字符串到UNIX时间戳,默认字符串格式如下。select unix_timestamp('1970-01-01 08:00:01');1select unix_timestamp('19700101 08:00:01','yyyyMMdd HH:mm:ss');1

其他日期函数

-- 获取日期部分select to_date('2017-08-04 11:40:03');2017-08-04-- 同样还有返回年、月、日、时、分、秒、周的函数select year('2017-08-04 11:40:03');2017select year('2017-08-04');2017select month('2017-08-04 11:40:03');8select month('2017-08-04');8select day('2017-08-04 10:03:01');4select day('2017-08-04');4select hour('2017-08-04 11:40:01');11select hour('11:40:01');11select minute('2017-08-04 11:40:01');40select second('2017-08-04 11:40:01');1select weekofyear('2017-08-04 11:40:01');31--返回两个日期相隔天数select datediff('2017-08-04','2015-05-09');818--增加天数select date_add('2017-08-04',10);2017-08-14--减少天数select date_sub('2017-08-04',10);2017-07-25

转载于:https://www.cnblogs.com/xuejianbest/p/10285018.html

你可能感兴趣的文章
百度地图路线检索(3)
查看>>
linux netstat 命令详解
查看>>
对前几篇blog的环境等的补充说明
查看>>
Curl命令使用解析大全
查看>>
MySQL日期函数
查看>>
【00】Effective Java
查看>>
.NET重构—单元测试重构
查看>>
SMB简介sabma服务(一)
查看>>
ANT简明教程
查看>>
Eclipse Luna WTP 与 Tomcat 8 的整合存在一个很头疼的 Bug
查看>>
小数在计算机里面的存放
查看>>
数据结构中的各种树简单解释
查看>>
我的朗科运维第七课
查看>>
CentOS的进程管理二
查看>>
https客户端证书导入
查看>>
用 PreparedStatement 向 SqlServer 中一次性插入多条记录
查看>>
Slackware-2014-0903
查看>>
CentOS下安装JDK1.7
查看>>
LDAP DIT设计参考
查看>>
iptables详解
查看>>