就这短短一个小问,本人汗颜,花了近两个小时才搞明白,具体步骤如下,望指正!
1、表内容

首先考虑什么是下周:现在可以得到的是现在的时间,current_data(),在通过dayofweek可以知道现在是周几。
确定星期几之后,就要弄清楚从今天到下周一差了几天,经过测试可以发现用9减去星期数在加上当前日期就可以得到下周一的日期,然后在用date_add(),就可以计算出下周日的日期
最后就是排查学生生日的月份和天数在这两个日期之间的人,本人就是一直在这里卡壳了,首先我直接想取出月份和天数,这个是可以用正则regexp_extract,也可以用日期格式化输出date_format(),只去‘M-d’。当然这里还比较容易想,但最关键的就是用后者取出来的数据不能直接用month和day单独取出对应位置上的数,所有这之后我又想到是不是可以把月份和天数截取出来,再转为Int类型或者字符串类型直接进行比较:collect_list(cast(regexp_replace(birthday,’-’,’’) as int)),这样处理之后的确将月份和天数拼接成了一个字符串或者转化为了一个数值,但是由于一些不可知的原因,转换之后的数不能通过常规方法,即大于小于或者between,and比较,最终也只能放弃。
好在脑子没有一直糊涂下去,最后我发现,其实并不需要把月份或天数取出来或者进行拼接等诸如此类的操作,仅仅只需要,在日期状态下,直接用month和day取出对应月份和天数,在和birthday中的月份,天数进行比较即可。(需要注意的就是,下周也可能出现跨月份的情况,需要详情考虑)
具体代码如下:
select
name,birthday
from

本文介绍了如何使用SQL和Hive查询下周即将过生日的学生。首先确定下周的起始和结束日期,然后通过比较学生的生日月份和日期来找出符合条件的学生。在处理过程中,遇到了月份和日期提取及比较的难题,最终找到了正确的解决方法。

3730

被折叠的 条评论
为什么被折叠?



