Hive SQL中如何计算给定日期的上一个周日?
嘿,我来帮你搞定这个Hive SQL的问题!
你遇到的核心问题是date_format返回的是字符串类型,没办法直接做减法运算,得先转成整数才行。不过还有个小细节要注意:Hive里date_format(my_date,'u')返回的是ISO标准的星期几(1=周一,7=周日),和你Excel里用的WEEKDAY(my_date,1)(1=周日)起始规则不一样,直接套用原来的逻辑会出偏差哦。
给你两个实用的解决方案:
方案一:修正类型转换+调整逻辑
把date_format的结果用cast转成整数,再用取模运算处理周日的情况:
DATE_SUB(my_date, cast(date_format(my_date, 'u') as int) % 7)
原理很简单:当日期是周日时,cast(...)得到7,7%7=0,减0天就保留了当天;其他日期(周一到周六)会减去对应的天数,正好得到上一个周日。
方案二:用dayofweek函数更贴合你的Excel逻辑
Hive自带的dayofweek函数返回的结果和你Excel里的WEEKDAY(,1)完全一致(1=周日,2=周一…7=周六),而且它直接返回数值类型,不用转换,写法更简洁:
DATE_SUB(my_date, dayofweek(my_date) - 1)
这个写法和你Excel里的my_date-WEEKDAY(my_date,1)+1逻辑完全匹配:比如周日时,dayofweek返回1,减1后是0,日期不变;周一返回2,减1后是1,日期往前推1天到上周日,完美符合需求。
你可以试试这两种写法,都能解决你的问题~
内容的提问来源于stack exchange,提问作者Chrissie M.
相关产品推荐
相关产品推荐

