美文网首页
Hive 函数大全

Hive 函数大全

作者: 青玉_f18c | 来源:发表于2020-10-27 11:34 被阅读0次

    日期操作

    • 获取当前时间
    // 方式一
    > select unix_timestamp() ;
    1521684090 
    // 方式二
    > SELECT from_unixtime(unix_timestamp())
    2018-03-22 10:04:38 
    //方式三
    > select current_timestamp;
    2018-03-22 10:04:02.568 
    
    • 日期加减:date_add / date_sub
    date_add([date], 1)                                                          -- 明天(第二个参数可负,表示前推几天)
    date_add([date],1 - dayofweek([date]))                                -- 本周第一天_周日
    date_add([date],7 - dayofweek([date]))                                -- 本周最后一天_周六
    date_add([date],1 - case when dayofweek([date]) = 1 then 7 else dayofweek([date]) - 1 end) -- 本周第一天_周一
    date_add([date],7 - case when dayofweek([date]) = 1 then 7 else dayofweek([date]) - 1 end)     -- 本周最后一天_周日
    
    • 时间差
    datediff('2018-02-27 10:00:00','2018-02-25 12:00:00')
    
    • 月份加减 add_months([datestr],int)
    # 例:上个月
    add_months(from_unixtime(unix_timestamp(), 'yyyy-MM'), -1)
    
    • 获取年、月、日、时、分、秒
     -- 如果字符串是比较规范的日期字符串,是可以直接计算日期的
    > select year('2020-03-13');
    2020
    > select month('2020-03-13');
    3
    > select day('2020-03-13');
    13
    > select hour(’2011-12-08 10:03:01′) 
    10
    > select minute(’2011-12-08 10:03:01′)
    3
    > select second(’2011-12-08 10:03:01′)
    1
    
    • 时间转日期to_date
    hive> select to_date('2011-12-08 10:03:01') 
    2011-12-08
    
    • 获取第几周weekofyear
    select weekofyear(’2011-12-08 10:03:01′) from dual;
    49
    
    • 当年、当月第一天
    trunc([date],'MM')                                             -- 当月第一天
    trunc([date],'YY')                                              -- 当年第一天
    // trunc 的其他用法,见 -> 后面附加trunc用法
    
    • 当年、当月最后一天
    last_day([date])                                                 -- 当月最后一天
    last_day(add_months(trunc([date],'YY'),12))    -- 当年最后一天
    
    • 当季第一天
    to_date(concat(year([date]),'-',lpad(ceil(month([date])/3) * 3 -2,2,0),'-01'))         -- 当季第一天
    
    • 当季最后一天
    last_day(to_date(concat(year([date]),'-',lpad(ceil(month([date])/3) * 3,2,0),'-01')))  -- 当季最后一天
    
    • 一周中特定的日期
    # 用next_day可以返回指定日期之后一周中特定的日期
    next_day([date],'TU')                                        -- 当前日期的下个周二
    
    • 附加:trunc用法
    一、日期
    TRUNC函数为指定元素而截去的日期值。
    其具体的语法格式如下:
    TRUNC(date[,fmt])
    其中:date 一个日期值
          fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
    如果当日日期是:2011-3-18
    1.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-18
    2.select trunc(sysdate, 'mm') from dual --2011-3-1 返回当月第一天.
    3.select trunc(sysdate,'yy') from dual --2011-1-1 返回当年第一天
    4.select trunc(sysdate,'dd') from dual --2011-3-18 返回当前年月日
    5.select trunc(sysdate,'yyyy') from dual --2011-1-1 返回当年第一天
    6.select trunc(sysdate,'d') from dual --2011-3-13 (星期天)返回当前星期的第一天
    7.select trunc(sysdate, 'hh') from dual --2011-3-18 14:00:00 当前时间为14:41
    8.select trunc(sysdate, 'mi') from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确
     
    二、数字
    TRUNC(number,num_digits)
    Number 需要截尾取整的数字。
    Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
    TRUNC()函数截取时不进行四舍五入
     
    9.select trunc(123.458) from dual --123
    10.select trunc(123.458,0) from dual --123
    11.select trunc(123.458,1) from dual --123.4
    12.select trunc(123.458,-1) from dual --120
    13.select trunc(123.458,-4) from dual --0
    14.select trunc(123.458,4) from dual --123.458
    15.select trunc(123) from dual --123
    16.select trunc(123,1) from dual --123
    17.select trunc(123,-1) from dual --120
    

    相关文章

      网友评论

          本文标题:Hive 函数大全

          本文链接:https://www.haomeiwen.com/subject/vntzmktx.html