SQLSEVER获取当月工作日天数

求当月天数 减去 当月周六周日天数

程序要简洁

柿柿 发布于 2021-12-10 10:40 (编辑于 2021-12-10 11:03)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
liyan006Lv3见习互助
发布于2021-12-10 11:04

select DATEDIFF( day,'2021-12-01' , '2021-12-31' ) + 1 - ( 2 * DATEDIFF( week , '2021-12-01' , '2021-12-31' ) + Case When DATEPART( dw , '2021-12-01' ) = 1 Then 1 Else 0 End + Case When DATEPART( dw , '2021-12-31' ) = 7 Then 1 Else 0 End ) as 工作天数 

最佳回答
0
用户E47mE1639Lv5见习互助
发布于2021-12-10 10:54(编辑于 2021-12-10 11:24)

select count(1) ct

from master.dbo.spt_values 

where type='P' and

number<=datediff(d,stuff(convert(varchar,getdate(),23),9,2,'01'),DATEADD(m, DATEDIFF(m,0,getdate())+1, 0))

and datepart(dw,dateadd(d,number,stuff(convert(varchar,getdate(),23),9,2,'01')))

not in(1,7)

  • 柿柿 柿柿(提问者) 还要减去当月的周六周日的天数
    2021-12-10 11:01 
  • 用户E47mE1639 用户E47mE1639 回复 柿柿(提问者) 已经修改了,你测试下
    2021-12-10 11:25 
最佳回答
0
snrtuemcLv8专家互助
发布于2021-12-10 10:58
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-12-10 10:58(编辑于 2021-12-10 11:01)

select * from (

select convert(char(7),getdate(),120)+'-'+right('0'+convert(varchar(2),number),2) as [日期格式1] 

,DATEPART(W,convert(char(7),getdate(),120)+'-'+right('0'+convert(varchar(2),number),2)) as [week]

from master..spt_values with(nolock) 

where type='P' and number>=1 

--and number<=datediff(dd,getdate(),dateadd(mm,1,getdate())) --对于mssql而言该语句不试用于2013-08-31的情况,这时由于9月没有31号,固计算出来的天数是30天 

and number<=datediff(dd,convert(char(7),getdate(),120)+'-01',convert(char(7),dateadd(mm,1,getdate()),120)+'-01')--转换为1号来计算天数

) a where week not in ('6','7')

PS:默认星期日是一周开始,若需要改语句前加

set datefirst 1---设置SQL一周从周一开始

set datefirst 7---设置SQL一周从周日开始

image.png

  • 柿柿 柿柿(提问者) 12月有31天 查出来30天?
    2021-12-10 11:04 
  • Z4u3z1 Z4u3z1 回复 柿柿(提问者) 你咋查出来的哦。不要where 就31,要了where 默认的也有22天,改成周一为一周开始有23
    2021-12-10 11:07 
最佳回答
0
CD20160914Lv8专家互助
发布于2021-12-10 11:29(编辑于 2021-12-10 11:30)

select 

count(t.dateaaa)-sum(t.xqj) as ts

 from (

SELECT

case when datepart(dw,  

CONVERT(VARCHAR(10),DATEADD(DAY,number,LEFT('2021-12-01',8) + '01'),120))>5 then 1 else 0 end as xqj,

CONVERT(VARCHAR(10),DATEADD(DAY,number,LEFT('2021-12-01',8) + '01'),120) as dateaaa

FROM master..spt_values

WHERE type = 'P' 

AND (number BETWEEN 0 AND 32) 

AND DATEADD(DAY,number,LEFT('2021-12-01',8) + '01') 

< DATEADD(MONTH,1,LEFT('2021-12-01',8) + '01')

) t 

where 1=1

image.png

  • 5关注人数
  • 567浏览人数
  • 最后回答于:2021-12-10 11:30
    请选择关闭问题的原因
    确定 取消
    返回顶部