在数据库中以季度为单位统计业务数据时,查询条件一般是自季度首日至当前日期,比如:
select * from 表名 where 日期字段>=季度首日 and 日期字段<=当前日期
由于季度首日的月份不一定是当前日期的月份,因此取季度首日日期比月度首日日期麻烦一些。这里介绍两个实现方案。
方案一:
(1)使用DateDiff函数,以一个1月1日的日期为起点,计算当前日期与该起点日期之间相隔的季度数
select datediff(quarter,'1900-1-1',getdate())
(2)使用DateAdd函数,在该日期起点的基础上,加上上一步计算出来的季度数
select DATEADD(quarter, datediff(quarter,'1900-1-1',getdate()),'1900-1-1')
(3)将1900-1-1这个起点日期参数简写为0
select DATEADD(quarter, datediff(quarter,0,getdate()),0)
上面这个SQL将返回季度首月的1号,如 2019-07-01 00:00:00.000。
方案二:
(1)使用DatePart函数,获取当前日期所属的季度序号
select datepart(QUARTER,GETDATE())
返回1,2,3,4这样的季度序号。
(2)使用季度号计算季度首月的月份
季度首月 = (季度号-1)*3+1 = 季度号*3 - 2
即:
select (datepart(QUARTER,GETDATE())*3-2)
(3)用当前年度、季度首月月份、1日,拼成一个日期
先使用DatePart(Year,...) 获取当前年度,拼接年月日,再转成date型:
select convert(date,convert(varchar,datepart(year,getdate())) + '-' + convert(varchar,datepart(QUARTER,GETDATE())*3-2) +'-1')
上面这个SQL语句同样返回 2019-07-01 这样的季度首日日期。