这个SQL如何写?100分

guanjm 乔达国际货运(上海)有限公司 数据库工程师/管理员  2008-02-28 01:11:58
就是比如我输入了2个时间段 2008-2-1 2008-3-1
然后计算天数
条件是 把周末和周六 还有节假日的要去掉
如何写这个SQL函数???
...全文
47 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
中国风 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
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-28 01:11
社区公告
暂无公告