sql 取上个月所有的工作日对应的天数

-- 取上个月所有的工作日对应的天数
DECLARE @t TABLE(dt DATETIME)
DECLARE @dtStart DATETIME
DECLARE @dtEnd DATETIME

SET @dtStart=DATEADD(mm,DATEDIFF(mm,0,dateadd(month,-1,getdate())),0)--上月第一天 
SET @dtEnd=dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))--上月最后一天

DECLARE @WeekDay int=7

DECLARE @WeekDayCount TABLE ([WeekDay] INT, WeekDayEnglish VARCHAR(10), DayCount INT)

WHILE @WeekDay <8
BEGIN
	WHILE @dtStart <= @dtEnd
	BEGIN
		 IF DATEPART(WEEKDAY,@dtStart)=@WeekDay INSERT INTO @t SELECT @dtStart
		 SET @dtStart=DATEADD(DAY,1,@dtStart)
	END

	--SELECT * FROM @t
	INSERT INTO @WeekDayCount
	SELECT @WeekDay,NULL,COUNT(*)
	FROM @t

	DELETE FROM @T

	SET @WeekDay=@WeekDay-1

	IF(@WeekDay<1) BREAK

	SET @dtStart=DATEADD(mm,DATEDIFF(mm,0,dateadd(month,-1,getdate())),0)--上月第一天 
	SET @dtEnd=dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))--上月最后一天

END
 

UPDATE A SET A.WeekDayEnglish=
(
	SELECT B.WeekDayEnglish   
	FROM 
		(
			SELECT 1 AS WeekDay,'Sunday' AS WeekDayEnglish
			UNION ALL SELECT 2 AS WeekDay,'Monday' AS WeekDayEnglish
			UNION ALL SELECT 3 AS WeekDay,'Tuesday' AS WeekDayEnglish
			UNION ALL SELECT 4 AS WeekDay,'Wednesday' AS WeekDayEnglish
			UNION ALL SELECT 5 AS WeekDay,'Thursday' AS WeekDayEnglish
			UNION ALL SELECT 6 AS WeekDay,'Friday' AS WeekDayEnglish
			UNION ALL SELECT 7 AS WeekDay,'Saturday' AS WeekDayEnglish
		) B
	WHERE B.WeekDay=A.WeekDay
)
FROM @WeekDayCount A

SELECT * FROM @WeekDayCount



 /*

 DATEPART(WEEKDAY,@dtStart)=1  表示周日,星期天
 DATEPART(WEEKDAY,@dtStart)=4  表示周三
  
  WeekDay     WeekDayEnglish DayCount
----------- -------------- -----------
7           Saturday       4
6           Friday         4
5           Thursday       4
4           Wednesday      4
3           Tuesday        5
2           Monday         5
1           Sunday         4

(7 行受影响)
 */

 

select datediff(dd,getdate(),dateadd(mm,1,getdate())) -- 计算当月共有多少天  

--select DATEADD(mm,DATEDIFF(mm,0,dateadd(month,-1,getdate())),0)--上月第一天   
--select dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))--上月最后一天  

select datediff(dd
      ,DATEADD(mm,DATEDIFF(mm,0,dateadd(month,-1,getdate())),0) 
      ,dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))  
	) + 1     -- 计算上个月共有多少天  



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值