在Hive原生版本中,目前并没有返回星期几的函数。
除了利用java自己编写udf外,也可以利用现有hive函数实现。

方法格式:

pmod(datediff('#date#', '任意年任意一个星期日的日期'), 7)

1、datediff 是两个日期相减的函数,hive日期函数可以见附录:
日期相减函数:datediff
语法:datediff(string enddate, string startdate)
返回值: int
说明: 返回两个时间参数的相差天数。
2、 pmod 是正取余函数:
正取余函数 : pmod
语法: pmod(int a, int b),pmod(double a, double b)
返回值: int double

说明: 返回正的a除以b的余数

如:2012-01-01刚好是星期日。
pmod(datediff('#date#', '2012-01-01'), 7)

返回值:int,“0-6”(“0-6”分别表示“星期日-星期六”)

注意:这里的日期必须是'string'类型的格式为'yyyy-MM-dd',因为datediff()函数对参数的要求

补充:当后边的日期不是周日的时候,我们可以对datediff结果进行加减到周日即可

例如:2018-01-01是周一,我们可以在datediff基础上+1/-6.

为什么是周一要+1呢,因为对于一整周的时间是少了一天.

变通一下,一样可以达到相同的目的:
select pmod(datediff('2018-06-04', '2018-01-01') - 6, 7);
select pmod(datediff('2018-06-04', '2018-01-01') + 1, 7);

附赠:bigint类型的日期转换成string(yyyy-MM-DD)类型的日期

from_unixtime(unix_timestamp(cast(20180707 as string),'yyyymmdd'),'yyyy-mm-dd')

20180707 -> '2018-07-07'

【hive】求日期是星期几的更多相关文章

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

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

  2. 编写Java程序随机输入日期计算星期几,打印任意一年的日历

    需求说明: 随机输入日期计算星期几,打印任意一年的日历 已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几 实现思路: 一.知道1900年1月1日为星期一,求输入的年份月份与1900年1 ...

  3. Swift根据日期字符串返回日期是星期几

    最近在做的一个IOS项目中需要根据日期得出日期代表的是星期几,日期以字符串的形式获得,于是该方法可以简单描述如下: /* * 根据日期格式字符串返回日期代表星期几 * 参数:dateTime,字符串类 ...

  4. SQLServer根据日期查询星期

    --根据日期查询星期SELECT SYSDATETIME();select datepart(weekday,getdate()); SET DATEFIRST 1select '星期'+case w ...

  5. jq 获取除节假日与周六日 外的日期 和 星期

    //设置节假日的数组         var holiday = Array('2016-04-30','2016-05-01','2016-05-02','2016-06-09','2016-06- ...

  6. VBA 操作 Excel 生成日期及星期

    直接上代码~~ 1.  在一个 Excel 生成当月或当年指定月份的日期及星期 ' 获取星期的显示 Function disp(i As Integer) Select Case i disp = & ...

  7. 根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

    根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期 >>>>>>>>>>>>>>>>&g ...

  8. MSSQL 获取指定日期所在星期的第一天和最后一天日期 获取指定日期坐在月的第一天和最后一天

    ufn_GetWeekFirstAndEndDay    获取指定日期所在星期的第一天和最后一天日期 ALTER FUNCTION [dbo].[ufn_GetWeekFirstAndEndDay]( ...

  9. hive时间日期函数及典型场景应用

    1.hive取得当前日期时间: 1.1) 取得当前日期: select current_date(); 1.2) 取得当前日期时间: select current_timestamp(); 1.3) ...

随机推荐

  1. AutoLayout性能不如frame

    http://draveness.me/layout-performance.html 复杂视图, 数量超过30个,用autoLayout就比较卡顿了 发现首页类似朋友圈,卡顿的原因应该就是使用了au ...

  2. C# WinForm实现任务栏程序图标闪烁

    相信大家在用QQ的时候都会知道,你打开了QQ聊天窗口,如果窗口不是当前激活的窗口的话,收到QQ消息时,任务栏(不是托盘图标)上的图标会闪一下变成黄色(Win7默认主题下),用以通知用户有消息进来了,之 ...

  3. Air Raid---hdu1151(最小路径覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151 最小路径覆盖 == 顶点数 - 最大匹配. #include<stdio.h> #i ...

  4. mysql查询乱码解决方法

    http://blog.csdn.net/u012408083/article/details/52734762 MySQL 命令行查询乱码 编码问题 当使用数据库工具查询数据时显示数据正常,中文也很 ...

  5. hadoop中map和reduce的数量设置

    hadoop中map和reduce的数量设置,有以下几种方式来设置 一.mapred-default.xml 这个文件包含主要的你的站点定制的Hadoop.尽管文件名以mapred开头,通过它可以控制 ...

  6. angry_birds_again_and_again(2014年山东省第五届ACM大学生程序设计竞赛A题)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2877 题目描述 The problems ca ...

  7. 装饰器的修复wraps,偏函数partial 以及chain

    将被装饰的函数的一些属性值赋值给 装饰器函数,最终让属性的显示更符合我们的直觉. from functools import wraps def wapper(func): @wraps(func) ...

  8. access 两表更新

    access 两表更新 update zz a inner join dz b  on  b.身份证号=a.身份证号 set a.电子学籍=b.学籍

  9. #C++初学记录

    输入与输出,头文件. #include<iostream> #include<algorithm> using namespace std; int main() { char ...

  10. 89. Gray Code(公式题)

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...