hive日期函数-Demo(二)

需求:某资产近一个月的资产值

比如:今天是2018年2月28日,近一个月若是按照自然月来算,那么是2018年2月1日至2018年2月28日。最终需要的日期格式为:yyyyMMdd。

当日时间戳

unix_timestamp() 方法可得到当前时间的时间戳。

上月今日

使用 add_months(日期,N) 函数可将日期往前、往后推N个月。主要有两种格式:
add_months(‘yyyy-MM-dd hh:mm:ss’,N),add_months(‘yyyy-MM-dd’,N)。N为正往后推,N为负往前推。例如:

hive> select add_months(‘2018-02-28‘, 3);
OK
2018-05-31
Time taken: 0.127 seconds, Fetched: 1 row(s)
hive> select add_months(‘2018-02-28‘, -3);
OK
2017-11-30
Time taken: 0.084 seconds, Fetched: 1 row(s)

时间戳格式化

由于add_months()方法的入参“日期”不能直接使用时间戳,需做一下转化。转化函数为:from_unixtime(时间戳, 日期、时间)。表现形式主要有:from_unixtime(时间戳, “yyyy-MM-dd hh:mm:ss”),from_unixtime(时间戳, “yyyy-MM-dd “)。如下:

hive> select from_unixtime(1519818348, ‘yyyy-MM-dd‘);
OK
2018-02-28
Time taken: 0.088 seconds, Fetched: 1 row(s)
hive> select from_unixtime(1519818348, ‘yyyy-MM-dd hh:mm:ss‘);
OK
2018-02-28 07:45:48
Time taken: 0.089 seconds, Fetched: 1 row(s)

往后一日

根据需求,当前日期往前推一个月后,还需往后推一日。往前、往后推N个日的函数为:date_add(日期,N)。主要有两种转换格式:date_add(‘yyyy-MM-dd hh:mm:ss’,N),date_add(‘yyyy-MM-dd’,N)。N为正往后推,N为负往前推。如下:

hive> select date_add(‘2018-02-28‘, 3);
OK
2018-03-03
Time taken: 0.089 seconds, Fetched: 1 row(s)
hive> select date_add(‘2018-02-28‘, -3);
OK
2018-02-25
Time taken: 0.085 seconds, Fetched: 1 row(s)

最终结果是:

from_unixtime(unix_timestamp(concat(date_add(add_months(from_unixtime(unix_timestamp(),‘yyyy-MM-dd hh:mm:ss‘),-1),1),‘ 10:10:10‘)), ‘yyyyMMdd‘)

我感觉他的 concat 一步还是比较多余,应该是没有深入理解unix_timestamp函数=》去使用拼串去 符合默认参数格式 ,最好指定参数格式

推荐

from_unixtime(unix_timestamp(date_add(add_months(from_unixtime(unix_timestamp(),‘yyyy-MM-dd hh:mm:ss‘),-1),1),‘yyyy-MM-dd‘), ‘yyyyMMdd‘)

原文地址:https://www.cnblogs.com/wqbin/p/10271075.html

时间: 2024-11-25 10:15:27

hive日期函数-Demo(二)的相关文章

hive 日期函数

1.unix时间戳转时间函数 ? 1 2 3 4 5 6 7 8 9 10 语法: from_unixtime(bigintunixtime[, string format]) 返回值: string 说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式 举例: hive>selectfrom_unixtime(1323308943,'yyyyMMdd')fromdual; 20111208 2.获取当前时区的unix时间戳 ? 1

hive日期转换函数2

转自大神 http://www.oratea.net/?p=944 无论做什么数据,都离不开日期函数的使用. 这里转载一下Hive的日期函数的使用,写的相当完整. 日期函数UNIX时间戳转日期函数: from_unixtime语法:from_unixtime(bigint unixtime[, string format]) 返回值: string说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive> select fr

hive函数总结-日期函数

获取当前UNIX时间戳函数: unix_timestamp语法: unix_timestamp() 返回值: bigint说明: 获得当前时区的UNIX时间戳举例: hive> select unix_timestamp() from dual; OK 1455616811 Time taken: 0.785 seconds, Fetched: 1 row(s) 日期函数UNIX时间戳转日期函数: from_unixtime 语法:from_unixtime(bigint unixtime[,

Hive的日期函数

1.unix时间戳转时间函数 语法: from_unixtime(bigint unixtime[, string format]) 返回值: string 说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式 举例: hive> select from_unixtime(1323308943,'yyyyMMdd') from dual; 20111208 2.获取当前时区的unix时间戳 语法: unix_timestamp() 返

Hive框架基础(二)

* Hive框架基础(二) 我们继续讨论hive框架 * Hive的外部表与内部表 内部表:hive默认创建的是内部表 例如: create table table001 (name string , age string) location '/input/table_data'; 此时:会在HDFS上新建一个table001表的数据存放地 接着执行: load data inpath'/input/data 'into table table001;(注意,load关键字后没有跟local关

第34天:日期函数、定时器、倒计时

一.日期函数(Date())设置本地日期:年月日时分秒1.声明日期var date=new Date();//创建一个新的日期函数2.使用函数date.getTime();//提倡使用,date.valueOf();得到距离1970年的毫秒数 console.log(Date().now());//直接使用console.log(+new Date()); 3.获取日期和时间getDate() 获取日 1-31getDay () 获取星期 0-6 getMonth () 获取月 0-11getF

JS日期函数

JS的日期函数有以下几个: getFullYear(); //获取当前年 getMonth(); //获取当前月,需要加1,而且只有一位数字,如果小于10需要前面加0 getDate(); //获取当前日,只有一位数字,如果小于10需要前面加0 getTime();//返回从 1970 年 1 月 1 日至今的毫秒数. toUTCString();//将当日的日期(根据 UTC)转换为字符串. getDay();//返回星期数 getHours();//返回小时 getMinutes();//返

GROUP BY和HAVING 以及mysql中常用的日期函数

一.mysql中的GROUP BY和HAVINGGROUP BY常见的是和聚合函数(SUM,MIN,MAX,COUNT)搭配使用. 比如:SELECT category,SUM(money) AS `total` FROM user_money GROUP BY category;按类别分组统计user_money表每个类别总计有多少money 现在如果增加个条件,需要统计每个类别中支出的money总量,比如rule=1为支出,则改写语句为SELECT category,SUM(money) A

日期函数、时间函数总结(MySQL 5.X)

一.MySQL 获得当前日期时间 函数1.1 获得当前日期+时间(date + time)函数:now()mysql> select now(); +---------------------+| now() |+---------------------+| 2008-08-08 22:20:46 |+---------------------+ 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:current_timestamp(),current_timestam