用SQL怎样获取某个月滴的实际工作日(即不包括周六日)

Msconfig_001 2009-07-28 08:48:38
用SQL怎样获取某个月滴的实际工作日(即不包括周六日)
select mouth,inworkpay*(workpays+fading)/(这里要算的就是那个天数) as workpay
月份是按照mouth来滴,mouth=200906
...全文
2051 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Msconfig_001 2009-07-28
  • 打赏
  • 举报
回复
多谢各位了哈!!!
阿彪兄 2009-07-28
  • 打赏
  • 举报
回复
支持一下
ff1222 2009-07-28
  • 打赏
  • 举报
回复
mark
快乐的毛毛虫 2009-07-28
  • 打赏
  • 举报
回复
好贴子
Msconfig_001 2009-07-28
  • 打赏
  • 举报
回复
select mouth,inworkpay*(workpays+fading)/(select dbo.getWorkDays(datename(year,mouth),datename(month,mouth))) as workpay

谢谢各位.OK了..马上结贴
sadan003 2009-07-28
  • 打赏
  • 举报
回复
有意思。
mbh0210 2009-07-28
  • 打赏
  • 举报
回复
其实5楼的就ok了。贴一下我的sql吧:

--创建函数(传入年和月份)
create function getWorkDays( @year int , @month int )
returns int as
begin
declare @CountDay int
declare @temptime datetime
set @CountDay = 0
set @temptime = convert(varchar,@year) + '-'+ convert(varchar,@month) + '-01'
while(MONTH(@temptime) = @month)
begin
if DATEPART(weekday,@temptime) <>1 and DATEPART(weekday,@temptime)<>7
begin
set @CountDay = @CountDay + 1
End
set @temptime = DATEADD(day,1,@temptime)
end
return @CountDay
end

--调用
select dbo.getWorkDays(2009,7)
loworth 2009-07-28
  • 打赏
  • 举报
回复


/*
一个月有几个工作日取决于当月天数和1号是周几

四 五 六 日 一~三
28 20 20 20 20 20
29 21 21 20 20 21
30 22 21 20 21 22
31 22 21 21 22 23



*/


DECLARE @date AS DATETIME
SET @date='2009-7-1' --@Date为要求月份的第一天



SELECT
CASE DATEDIFF(DAY,@date,DATEADD(MONTH,1,@date))
WHEN 28 THEN 20
WHEN 29 THEN CASE DATEPART(dw,@date) % 6 WHEN 1 THEN 20 ELSE 21 END
WHEN 30 THEN CASE DATEPART(dw,@date) WHEN 6 THEN 21 WHEN 1 THEN 21 WHEN 7 THEN 20 ELSE 22 END
ELSE CASE DATEPART(dw,@date)WHEN 5 THEN 22 WHEN 6 THEN 21 WHEN 7 THEN 21 WHEN 1 THEN 22 ELSE 23 END
END


/*

-----------
23

(1 行受影响)

*/
Msconfig_001 2009-07-28
  • 打赏
  • 举报
回复
不需要算法定日期,只需要计算周六周日就行.
然后算到一个月的工作天数.
  • 打赏
  • 举报
回复
每个月倒不用,主要把那些日期不固定的法定假日,如春节等,存到一个表里就可以了。
mbh0210 2009-07-28
  • 打赏
  • 举报
回复
这样Sql语句就可以搞定了。
mbh0210 2009-07-28
  • 打赏
  • 举报
回复
楼主,你首先建一个表,将每个月的假期的数据信息插入
叶子 2009-07-28
  • 打赏
  • 举报
回复

create function f_getnums(@year_month varchar(8))
returns int
as
begin
declare @bdt datetime,@edt datetime,@i int
set @i=0
set @bdt=cast(@year_month+'-01' as datetime)
set @edt=dateadd(d,-1,dateadd(month,1,cast(@year_month+'-01' as datetime)))

while datediff(d,@bdt,@edt)>=0
begin
if datepart(dw,@bdt)=1 or datepart(dw,@bdt)=7
begin
set @i=@i+1
end
set @bdt=dateadd(d,1,@bdt)
end
return @i
end

declare @date datetime
set @date='2009-06-01'
select datediff(dd,@date,dateadd(mm,1,@date))-dbo.f_getnums(convert(varchar(07),@date,120)) as workpay

/*
workpay
-----------
22
*/

pdsnet 2009-07-28
  • 打赏
  • 举报
回复
以前听说过这个问题.没做过
Msconfig_001 2009-07-28
  • 打赏
  • 举报
回复
已经没办法用C#来做拉...假如是用C#好处理点!~~

没办法.数据库前人安排好了.要改怕也改不成,数据大!
  • 打赏
  • 举报
回复
这个用sql做太麻烦,闰年,法定假日,双休日都要判断,用C#写比较好
loworth 2009-07-28
  • 打赏
  • 举报
回复
这个有点意思 占个座 再慢慢研究

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧