这个SQL如何写?100分

guanjm 2008-02-28 01:11:58
就是比如我输入了2个时间段 2008-2-1 2008-3-1
然后计算天数
条件是 把周末和周六 还有节假日的要去掉
如何写这个SQL函数???
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2008-02-28
  • 打赏
  • 举报
回复
--节假日需要一个表对照
declare @date1 datetime,@date2 datetime,@i int
select @date1='2008-02-01',@date2='2008-03-01',@i=0
while @date1<=@date2
begin
if datepart(dw,@date1) not in(1,7)--默认情况下@@datefirst为7
set @i=@i+1
set @date1=dateadd(day,1,@date1)
end

select @i


-----------
21

(所影响的行数为 1 行)



想飞的狼 2008-02-28
  • 打赏
  • 举报
回复
d
guanjm 2008-02-28
  • 打赏
  • 举报
回复
LS的 最好写个函数 参数是2个日期 然后出来相应天数(去掉周末周六和节假日) 谢谢
中国风 2008-02-28
  • 打赏
  • 举报
回复

--天数用datediff
create function F_month(@YMonth nvarchar(6))
returns @T table(日 varchar(4),一 varchar(4),二 varchar(4),三 varchar(4),四 varchar(4),五 varchar(4),六 varchar(4))
as
begin
declare @Tmp table([weekday] int,[day] nvarchar(2),[group] int)---增加一列作为分组显示
declare @i int,@j int,@date datetime,@group int
select @date=@YMonth+'01',@i=datediff(dd,@date,dateadd(month,1,@date)),@j=0,@group=0
while @i>@j
begin
insert @Tmp select (datepart(dw,@date)+@@datefirst-1)%7,datepart(d,@date),case when (datepart(dw,@date)+@@datefirst-1)%7=0 then @group+1 else @group end
select @j=@j+1,@group=case when (datepart(dw,@date)+@@datefirst-1)%7=0 then @group+1 else @group end,@date=dateadd(dd,1,@date)
end
insert @T
select
max(case when [weekday]=0 then [day] else '' end),
max(case when [weekday]=1 then [day] else '' end),
max(case when [weekday]=2 then [day] else '' end),
max(case when [weekday]=3 then [day] else '' end),
max(case when [weekday]=4 then [day] else '' end),
max(case when [weekday]=5 then [day] else '' end),
max(case when [weekday]=6 then [day] else '' end)
from
@Tmp
group by [group]
return
end


go
select * from F_month('0712')
或:
select * from F_month('200712')

--drop function F_month

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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