暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hive-日期转换函数

趣说大数据 2021-03-26
2251

01

简介


整理了一些工作中经常使用的时间转换函数,并通过一些简单的案例演示如何使用。
官网参考地址:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions
复制
查看方法的Hive命令:
--查看所有方法
SHOW FUNCTIONS;
--查看方法声明
DESCRIBE FUNCTION <function_name>;
--查看方法的详细使用说明
DESCRIBE FUNCTION EXTENDED <function_name>;
复制


02

常用方法整理


  • from_unixtime

语法:from_unixtime(bigint unixtime[, string format])
返回值:string
说明:转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格
eg:select from_unixtime(cast(current_timestamp() as bigint),'yyyy-MM-dd');
2021-03-25
复制
  • unix_timestamp

一 语法:unix_timestamp(string date)
返回值:bigint
说明:传入一个yyyy-MM-dd HH:mm:ss类型的时间字符串,返回一个以系统时区
转换后的时间戳 
eg:select unix_timestamp("2021-03-24 23:30:30");
1616599830
二 语法:unix_timestamp(string date, string pattern);
返回值:bigint
说明:传入一个字符串时间,和格式化类型,返回一个转换后的时间戳
eg:select unix_timestamp("2021-03-24 23:30:30","yyyy-MM-dd");
1616515200
复制
  • to_date

语法:to_date(string timestamp)
返回值:2.1之前返回字符串,2.1之后返回date类型
说明:select to_date("1970-01-01 00:00:00");
"1970-01-01"
复制
  • year

语法:year(string date)
返回值:int
说明:返回传入时间的年份
eg:select year("1970-01-01 00:00:00");
1970 
 select year("1970-01-01") ;
1970
复制
  • month

语法:month(string date)
返回值:int
说明:获取传入时间的月份部分
eg:select month("1970-11-01 00:00:00") ;
11
 select  month("1970-11-01") ;
11
复制
  • day

一 语法:day(string date) 
返回值:int
说明:获取传入时间的日部分
eg:select day("1970-11-01 00:00:00") ;
 1
  select tday("1970-11-01") ;
 1
二 语法:dayofmonth(date)
返回值:int
说明:获取传入时间的日部分
eg:select dayofmonth("2021-02-01")
 1
 select dayofmonth("2021-02-01 12:00:00");
 1
复制
  • hour

语法:hour(string date)
返回值:int
说明:获取传入时间的小时部分
eg:select hour('2009-07-30 12:58:59') ;
 12
 select hour('12:58:59')
 12
复制
  • datediff

语法:datediff(string enddate, string startdate);
返回值:int
说明:返回日期的差值
eg:select datediff('2009-03-01''2009-02-27') ;
2
复制
  • date_add

语法:date_add(date/timestamp/string startdate, tinyint/smallint/int days)
返回值:int
说明:在基础日期上加上指定天数,天数可为负
eg:select date_add("2021-03-25",1);
2021-03-26
select date_add("2021-03-25",-1);
2021-03-24
复制
  • date_sub

语法:date_sub(date/timestamp/string startdate, tinyint/smallint/int days)
返回值:int
说明:日期减函数,天数值可为负
eg:select date_sub("2021-03-25",-1);
2021-03-26
select date_sub("2021-03-25",1);
2021-03-24
复制
  • date_format

语法:date_format(date/timestamp/string ts, string fmt)
返回值:string
说明:日期格式化函数
eg:select date_format(current_timestamp(),'yyyy-MM-dd');
2021-03-25
select date_format("2021-02-01 12:30:20",'yyyy/MM/dd hh:mm:ss');
2021/02/01 12:30:20
日期格式化类型官网介绍:
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
复制
  • quarter

语法:quarter(date/timestamp/string)
返回值:int
说明:返回当前季度 1-4 之间的值
eg: select quarter('2015-04-08') ;
2
复制

  • extract

语法:extract(field FROM source)
返回值:int
说明:时间信息提取,可提取值day, dayofweek, hour, minute, month, quarter, second, week and year
eg: select extract(day from "2021-03-01");
1
select extract(dayofweek  from "2021-03-01");
2
select extract(month  from "2021-03-01");
3
复制
  • current_date

语法:current_date
返回值:date
说明:返回当前时间
eg: select current_date;
2021-03-24
复制
  • current_timestamp

语法:current_timestamp
返回值:timestamp
说明:返回当前时间戳类型
eg: select current_timestamp;
2021-03-24 10:48:22.103
复制
  • add_months

语法:add_months(string start_date, int num_months, output_date_format)
返回值:string
说明:月份加减函数 
egselect add_months("2021-02-01",1,"yyyyMMdd");
20210301
select add_months("2021-02-01",-1,"yyyyMMdd");
20210101
复制
  • last_day

语法:last_day(string date) 
返回值:string
说明:返回本月的最后一天 date is a string in the format 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'. 其它格式的输入将会被忽略
egselect last_day("2021-03-01");
2021-03-31
select last_day("2021-03-01 12:30:23");
2021-03-31
select last_day("2021/03/01 12:30:23"); 格式不支持
NULL
复制
  • next_day

语法:next_day(string start_date, string day_of_week)
返回值:string
说明:day_of_week 可选参数为星期一到周天的英文单词
星期一Monday简写为Mon,星期二Tuesday简写为Tue,星期三Wednesday简写为Wed,
星期四Thursday简写为Thu,星期五Friday简写为Fri,星期六Saturday简写为Sat,
星期日Sunday简写为Sun
eg: 取当前日期的下一个星期一;
SELECT next_day('2021-03-01', 'Mon');
2021-03-08
SELECT next_day('2021-03-01', 'Monday');
2021-03-08
复制
  • trunc

语法:trunc(string date, string format)
返回值:string
说明:初始化指定格式的日期
eg:select trunc('2021-03-24','YY');
2021-01-01
select trunc('2021-03-24','MM');
2021-03-01
复制
03

组合案例


  • 获取上月月初时间

select add_months(trunc('2021-03-24','MM'),-1,'yyyy-MM-dd');
2021-02-01
复制
  • 获取上月月末时间

select last_day(add_months('2021-03-24',-1,'yyyy-MM-dd'));
2021-02-28
复制
  • 获取下月月初时间

select add_months(trunc('2021-03-24','MM'),1,'yyyy-MM-dd');
2021-04-01
复制
  • 获取下月月末时间

select last_day(add_months('2021-03-24',1,'yyyy-MM-dd'));
2021-04-30
复制
  • 时间格式yyyyMMdd转yyyy-MM-dd

select from_unixtime(unix_timestamp('20210304','yyyyMMdd'),'yyyy-MM-dd');
2021-03-04
复制
  • 时间戳格式转yyyy-MM-dd

select from_unixtime(cast(1614787200 as bigint),'yyyy-MM-dd' )
2021-03-04
复制


04

作弊技巧


女朋友问:"我们在一起多少天?"。咱偷偷做个弊!
select abs(datediff('2016-05-21','2021-03-24'));
1768
复制
文章转载自趣说大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论