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

比如:今天是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')

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

  1. hive日期函数-原生函数(二)

    1. from_unixtime 日期函数UNIX时间戳转日期函数: from_unixtime 语法:from_unixtime(bigint unixtime[, stringformat]) 返 ...

  2. hive日期函数

    今天select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') UNIX时间戳转日期函数: from_unixtime 语法: from_ ...

  3. 【hive 日期函数】Hive常用日期函数整理

    1.to_date:日期时间转日期函数 select to_date('2015-04-02 13:34:12');输出:2015-04-02122.from_unixtime:转化unix时间戳到当 ...

  4. Hive日期函数总结(转学习使用)

    一.时间戳函数 1.获取当前时区的UNIX时间戳:select unix_timestamp(); 2.将指定时间转为UNIX时间戳: select unix_timestamp('2012-03-0 ...

  5. hive日期函数-杂谈(一)

    来到广发返现由于历史遗留问题很多时间格式十分杂乱 我将总结一下时间日期的事情 1.hive原生时间函数的功能 2.一些基本业务时间范围的指标的sql案例 3.自定义udf函数让后来人更方便

  6. presto和hive日期函数对比

    时间格式转换 日期格式→Unix时间戳 转10位Unix时间戳 数据:2020-07-23 15:01:13 Presto:select to_unixtime(cast('2020-07-23 15 ...

  7. hive日期函数-广发实战(三)

    近一月客户新增常规里程数与额度比即上个月 第一天(包含)到上个月最后一天(包含) 字段是batch_date==>格式是 yyyymmdd ),'MM'),'-',''); +--------- ...

  8. hive函数总结-日期函数

    获取当前UNIX时间戳函数: unix_timestamp语法: unix_timestamp() 返回值: bigint说明: 获得当前时区的UNIX时间戳举例: hive> select u ...

  9. Hive中日期函数总结

    --Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...

随机推荐

  1. IT管理

    IT管理:变更管理:1/ 简单版,效率高类似数仓拉一个相关群,先和业务确定时间,然后在群里发通知.通知模板:@所有人 通知 :hive 计算集群停30分钟 原因: 当前数据量增多,hue 查询内存不足 ...

  2. 2019牛客暑期多校训练营(第六场)-E Androgynos (构造题)

    题目链接:https://ac.nowcoder.com/acm/contest/886/E 题意:给出n,求能否构造一个含n个顶点的简单无向图,且它的补图与它同构. 思路:首先要满足与其补图同构,同 ...

  3. [loj#539][LibreOJ NOIP Round #1]旅游路线_倍增_dp

    「LibreOJ NOIP Round #1」旅游路线 题目链接:https://loj.ac/problem/539 题解: 这个题就很神奇 首先大力$dp$很好想,因为可以把一维放到状态里以取消后 ...

  4. Day1 模拟赛 题解

    T1:首先你要发现,对于任意一个奇数i,i xor (i-1)=1; 那么我们可以将答案转化为统计有多少个1相互异或起来: 所以答案就那么几种: 如果你用的数位DP,只能说明你太高估day1T1了: ...

  5. MySQL各大存储引擎

    MySQL各大存储引擎: 最好先看下你下的MySQL支持什么数据库引擎 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, ...

  6. Java中的自动拆装箱(转)

    出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识.  基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...

  7. 并不对劲的bzoj4001:loj2105:p3978:[TJOI2015]概率论

    题目大意 随机生成一棵\(n\)(n\leq10^9)个节点的有根二叉树,问叶子结点个数的期望. 题解 subtask 1:\(n\leq100\),70pts 结论:不同的\(n\)个节点的有根二叉 ...

  8. weblogic连接池

    1.在 使用JDBC连接池的过程中,最常见的一个问题就是连接池泄漏问题.一个池里面的资源是有限的,应用用完之后应该还回到池中,否则池中的资源会被耗尽. WebLogic Server提供了一个Inac ...

  9. 进阶Java编程(8)反射应用案例

    1,反射实例化对象 经过一系列分析之后可以发现虽然获得了Class类的实例化对象但是依然觉得这个对象获取的意义不是很大,所以为了进一步的帮助大家理解反射的核心意义所在,下面将通过几个案例进行说明(都是 ...

  10. 修改NPM默认全局安装路径

    场景: 最近在新电脑上鼓捣完环境后,打算切换下源,结果使用全局安装的nrm时提示找不到命令,之前都是这么用现在怎么不行了呢? 排查过程: 于是各种折腾,发现- g安装的插件目录在C盘中的某个路径中,后 ...