SQL Server取季度首日

在数据库中以季度为单位统计业务数据时,查询条件一般是自季度首日至当前日期,比如:

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 这样的季度首日日期。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值