GBase 8a
其他
文章

8a中如何用SQL来获取当前日期的上一季度的天数

发表于2024-09-09 16:38:2862次浏览1个评论

引言:

实际业务现场,会用到根据当前日期获取上一季度的天数的情况,这种情况可用用如下的方式来进行获取。

用到的函数:

1、datediff: 
DATEDIFF(expr,expr2),返回开始日期 expr 和结束日期 expr2 之间的天数,expr和expr2是date或者datetime表达式。但只有日期部分用于计算。如果用于计
算日期间隔的参数不是一个date或者datetime类型,例如TIME型数据,则计算结果是不可信的。
2、last_day:
LAST_DAY(date),返回date中当前月对应的最后一天的值。其中,date为日期或日期时间类型,如果参数date无效,则返回NULL。
3、makedate:
MAKEDATE(year,dayofyear),给出年份值year和一年中的天数值dayofyear,返回日期值。dayofyear必须大于 0,否则返回NULL。
4、extract:
EXTRACT(type FROM date),用于指定从日期中提取的部分,可返回的type类型有:date、time、year、quarter、month、day、week、hour、minute、second、microsecond。
5、quarter:
QUARTER(date),返回date所代表的时间在年中的季度数,范围为1~4。
6、date_format:
DATE_FORMAT(date,FORMAT),依照FORMAT字符串格式化date值,下表是常用的格式值及说明。

格式

描 述

%a星期名的英文缩写形式(Sun...Sat)
%b月份的英文缩写形式(Jan...DEC)
%c月份的数字形式(0...12)
%D有英文后缀的某月的第几天(0th, 1st, 2nd, 3rd...)
%d月份中的天数,数字形式(00...31)
%e月份中的天数,数字形式(0...31)
%f微秒(000000...999999)
%H小时,24 小时制(00...23)
%h小时,12 小时制(0,1...12)
%I小时,12 小时制,个位数字前加 0(01...12)
%i分钟,数字形式(00...59)
%j一年中的天数(001...366)
%k小时,24 小时制(0...23)
%l小时,12 小时制(1...12)
%M月份,英文形式全拼(January...December)
%m月份,数字形式(00...12)
%pAM 或 PM
%r时间,12 小时制(HH:MI:SS 后面紧跟 AM 或 PM)
%S秒(00...59)
%s秒(00...59)
%T时间,24 小时(HH:MI:SS)
%U星期(00...53),星期日是一个星期的第一天
%u星期(00...53),星期一是一个星期的第一天
%V星期(01...53),星期日是一个星期的第一天。与“%X”一起使用
%v星期(01...53),星期一是一个星期的第一天。与“%x”一起使用
%W星期名的英文全拼形式(Sunday...Saturday)
%w一星期中的哪一天(0=Sunday...6=Saturday)
%X以 4 位数字形式反映周所在的年份,星期日周的第一天
%x以 4 位数字形式反映周所在的年份,星期日周的第一天
%Y4 位数字形式表达的年份
%y2 位数字形式表达的年份
%%一个字母“%”

获取当前日期的上一季度天数的实际写法如下:
select datediff(
LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM current_date),1) + interval QUARTER(current_date)*3-4 month)
,date(concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM current_date),1) + interval QUARTER(current_date)*3-6 month),'%Y-%m-'),'01')))+1;

在gbase 8a中的执行结果如下,当前是9月9号,上个季度是Q2,4月30天,5月31天,6月30天,总体天数就是91天:

评论

登录后才可以发表评论
用户头像
levvel发表于 3个月前
感谢分享