在建表的时候我们常将日期字段设置为INT类型,将诸如
20180601
这样的数字值来表示日期,这样在做日期比较等操作时没有问题,但是要进行某些日期计算,就要先转成日期类型才能进行计算了,怎么转换呢?
下面在Hive中先建一个表,含有一个INT类型的日期字段,插入两行数据。
create table tb (dt INT);
insert into tb values (20180701);
insert into tb values (20180715);
这里第一种方法是将INT
类型的日期值转成STRING
类型,用Hive内置的unix_timestamp
函数转成时间戳类型,最后将时间戳用from_unixtime
转成yyyy-MM-dd
的日期类型。
第二种就比较直接,将INT
类型的日期值转成STRING
类型,再对字符串进行截取处理,用-
拼接起来。
select dt,
from_unixtime(unix_timestamp(cast(dt as string),'yyyyMMdd'),'yyyy-MM-dd') as a,
concat(substr(cast(dt as string),1,4), '-',substr(cast(dt as string),5,2), '-',substr(cast(dt as string),7,2)) as b
from tb;
20180701
2018-07-01
2018-07-01
20180715
2018-07-15
2018-07-15
当然,每次都这样写有些费劲,可以在Hive中创建UDF或者宏,转换时进行调用就好了。
创建宏命令
宏命令相对于UDF要简单方便些,但是宏只能是临时宏,只在本次会话中可见、有效。因此你需要将宏脚本放在SQL脚本的头部。
DROP TEMPORARY MACRO IF EXISTS date_trans;
CREATE TEMPORARY MACRO date_trans(dt int)
if(dt is not null and length(dt)=8,
concat(substr(cast(dt as string),1,4), '-',substr(cast(dt as string),5,2), '-',substr(cast(dt as string),7,2)),
null);
select dt,date_trans(dt) as a from tb;
如果同一个功能的函数或宏命令被多次调用,那维护起来就很方便,语句也简洁很多。
java项目中的权限设置 java权限管理shiro
一、Shiro 简介1、关于 ShiroApache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。官网:https://shiro.apache.org/
2、Shiro 主要功能Authentication:身份认证/登录,验证用户是不是拥有