zoukankan      html  css  js  c++  java
  • Hive時間函數-年份相加減

    Hive時間函數-年份相加減

    目前為止搜了很多资料,都没有找到Hive关于时间 年份,月份的处理信息,所以就自己想办法截取啦

    本来是用了概数,一年365天去取几年前的日期,后来测试的发现不够精准,然后给提了mantis bug.

    emmmmm..... 然后就想办法精准吧,找不到相应函数就自己来凑哈哈哈

    例如,我需要取当前时间3年以前的日期 (当前日期为2019年11月14日晚8点+)

    实现思路:(通过字符串的截取与拼接)

    1.先获取当前时间

    2.取的当前时间的年份信息

    3.将当前时间的年份信息 减去 3

    4.将新的年份与原来的月份及日 拼接

    5.即可得到精准的三年以前的数据信息啦

    首先我们获取当前时间信息:

    select from_unixtime(unix_timestamp()); //输出结果 2019-11-14 20:41:03

    得到当前时间的年份:

    select from_unixtime(unix_timestamp()); // 输出结果 2019

    得到当前时间的年份的三年以前的年数据:

    select  year(from_unixtime(unix_timestamp()))-3; //输出结果 2016

    拼接 新的年份信息 与 原来的月份及日信息 (因为我这里目前只需要精准到日,所以就不附加时分秒信息了)

    select  concat(cast ((year(from_unixtime(unix_timestamp(),'yyyy-MM-dd'))-3) as string),substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),5,6)); //输出结果 2016-11-14

    以上便得到了我们要的三年以前的今天啦,往后我们在需要使用年份比较数据的时候均可借鉴此思路(再还没有出现合适的年份加减函数之前)

    ps: 在实际应用中我们也可以使用具体的日期来代替当前日期

    例如: select  concat(cast ((year('2019-11-11')-3) as string),substr('2019-11-11',5,6));  //输出结果 2016-11-11

    我们也可以使用数据库中的表日期字段来代替当前日期

    例如:select  concat(cast ((year(t.startdate)-3) as string),substr(t.startdate,5,6)) , t.startdate  from  t_testyear t ; // 其中startdate是数据表中的一个日期字段

  • 相关阅读:
    初识Java,关于一个简单的ATM机的java程序设计
    字符串和字符串对象的区别
    集中常见得字符串处理方式
    得到类模板的3种方式
    反射的条件
    封装一个标签加文本框
    建立及中常见的布局管理器
    随机输入3个正整数,程序出来从小到大排列
    java 基础
    IO
  • 原文地址:https://www.cnblogs.com/DFX339/p/11861988.html
Copyright © 2011-2022 走看看