sql server常用日期

常用日期

以下getdate()取’2023–03-15’

一年中的第一天

SELECT CONVERT(CHAR(5),GETDATE(),120)+'01-01'
SELECT DATEADD(YY,DATEDIFF(YY,0,GETDATE()),0)
  • 其中char(5)是为了取日期的前五个字符。
  • getdate()是获取当前日期。根据情况可以换成其它日期
  • convert是将日期型转化为字符型
    eg:
SELECT CONVERT(CHAR(5),'2023-03-21',120)+'01-01'
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 
2023-01-01
2023-01-01

年的最后一天

SELECT CONVERT(CHAR(5),GETDATE(),120)+'12-31'
SELECT dateadd(day, -1, dateadd(month, 1,convert(varchar(4),datepart(year, getdate())) + '-12-01'))
2023-12-31
2023-12-31

指定季度的第一天

--方法一
SELECT CONVERT(DATETIME,
	CONVERT(CHAR(8),
		DATEADD(Month,
			DATEPART(Quarter,GETDATE())*3-Month(GETDATE())-2,
			GETDATE()),
		120)+'1')

--方法二
SELECT CASE WHEN DATEPART(QUARTER,GETDATE())=1 THEN CONVERTpqewriung(DATETIME,CAST(YEAR(GETDATE()) AS VARCHAR(10))+'-01-01')
WHEN DATEPART(QUARTER,GETDATE())=2 THEN CONVERT(DATETIME,CAST(YEAR(GETDATE()) AS VARCHAR(10)) +'-04-01')
WHEN DATEPART(QUARTER,GETDATE())=3 THEN CONVERT(DATETIME,CAST(YEAR(GETDATE()) AS VARCHAR(10))+'-07-01')
WHEN DATEPART(QUARTER,GETDATE())=4 THEN CONVERT(DATETIME,CAST(YEAR(GETDATE()) AS VARCHAR(10))+'-10-01')
ELSE NULL end
2023-01-01
2023-01-01
  • 第二个方法采用的是case when … then 条件判断得到的当前季度的第一天日期。
  • DATEPART是返回指定日期的指定类型的函数,返回的是int型。而datename返回的是字符型。

指定季度的第一天

--第一种方法
SELECT DATEADD(Day,-1,
	CONVERT(CHAR(8),
		DATEADD(Month,
			1+DATEPART(Quarter,GETDATE())*3-Month(GETDATE()),
			GETDATE()),
		120)+'1')
--第二种方法
SELECT CONVERT(DATETIME,
	CONVERT(CHAR(8),
		DATEADD(Month,
			DATEPART(Quarter,GETDATE())*3-Month(GETDATE()),
			GETDATE()),
		120)
	+CASE WHEN DATEPART(Quarter,GETDATE()) in(1,4)
		THEN '31'ELSE '30' END)

2023-3-31
2023-3-31
  • 由于每个月的天数不一样,需要对季度进行判断。在第一季度和第四季度时有31天,第二季度和第三季度是30天。

指定日期月的第一天

SELECT CONVERT(DATETIME,CONVERT(CHAR(8),GETDATE(),120)+'01')
SELECT DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)
2023-03-01 00:00:00.000

指定日期月的最后一天

SELECT DATEADD(Day,-1,CONVERT(CHAR(8),DATEADD(Month,1,GETDATE()),120)+'01')
2023-03-31 00:00:00.000

指定日期的本周第一天

Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 
2023-03-13 00:00:00.000

指定日期的本周最后一天

SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),6)
2023-03-19 00:00:00.000 

封装成函数

CREATE FUNCTION trandate  --
--SELECT dbo.trandate ('2023-03-15','M',1)
(@yourdate DATETIME,
@type VARCHAR(7),
@daytype INT  --1表示月、季度、年、周的第一天,2表示月、季度、年、周的最后一天,
)
RETURNS SMALLDATETIME
AS
BEGIN
  DECLARE @Result SMALLDATETIME;
-- 年的第一天
SELECT  @Result= DATEADD(YY,DATEDIFF(YY,0,@yourdate),0) WHERE @type='Y' AND @DAYTYPE=1
 
-- 年的最后一天
SELECT @Result=CONVERT(CHAR(5),@yourdate,120)+'12-31' WHERE @type='Y' AND @DAYTYPE=2

--季度的第一天
SELECT @Result=CONVERT(DATETIME,
	CONVERT(CHAR(8),
		DATEADD(MONTH,
			DATEPART(QUARTER,@yourdate)*3-MONTH(@yourdate)-2,
			@yourdate),
		120)+'1')
WHERE @type='Q' AND @DAYTYPE=1

--季度的最后一天
SELECT @Result=CONVERT(DATETIME,
	CONVERT(CHAR(8),
		DATEADD(MONTH,
			DATEPART(QUARTER,@yourdate)*3-MONTH(@yourdate),
			@yourdate),
		120)
	+CASE WHEN DATEPART(QUARTER,@yourdate) IN(1,4)
		THEN '31'ELSE '30' END)
		WHERE @type='Q' AND @DAYTYPE=2

--月的第一天
 
SELECT @Result=DATEADD(MM,DATEDIFF(MM,0,@yourdate),0) WHERE @type='M' AND @DAYTYPE=1

--月的最后一天
SELECT @Result=DATEADD(DAY,-1,CONVERT(CHAR(8),DATEADD(MONTH,1,@yourdate),120)+'01') WHERE @type='M' AND @DAYTYPE=2
 

--本周的第一天
SELECT @Result=DATEADD(wk, DATEDIFF(wk,0,@yourdate), 0) WHERE @type='W' AND @DAYTYPE=1

--本周的最后一天
SELECT @Result=DATEADD(wk,DATEDIFF(wk,0,@yourdate),6) WHERE @type='W' AND @DAYTYPE=2

      RETURN @Result;

 END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值