select sn=identity(int,0,1) into #t from syscolumns
select count(*) from #t
where datediff(month,cast('2004-04-01' as datetime)+sn,'2004-04-01')=0
and datepart(weekday,cast('2004-04-01' as datetime)+sn) between 2 and 6
select count(*) from #t
where datediff(month,cast('2004-04-01' as datetime)+sn,'2004-04-01')=0
and datepart(weekday,cast('2004-04-01' as datetime)+sn) between 2 and 6
解决方案 »
- 新手求解决问题SQL查询排序后
- SQL有没有隐藏列的函数.在MSDN里面没有找到
- 请教如何用C#代码创建SQL数据库视图?
- sql登陆失败而无法启动
- 求统计的SQL语句
- 怎样获得一个表的主键?
- 关于在DELPHI中使用SQL_DMO对象库的问题,请高手帮助!!
- @value=exec('select ' + @fieldname+ ' as bm from biaozhun where wd= 30')怎样能实现?
- 如何用SQL语句判断SQLserver2000数据库中的表是否存在,有没有这样的函数
- Vc +SQL SERVER难题求救!
- jsp通过ODBC连接SQLserver连接不上
- SQL默认编码是多少啊?还有JSP问题,明早来就结贴!!!
drop function [dbo].[f_workday]
GO--得到指定日期之间的工作日天数
create function f_workday(
@dt_begin datetime,
@dt_end datetime
)returns int
as
begin
declare @dt datetime,@re int,@i int
if @dt_begin>@dt_end
select @dt=@dt_begin
,@dt_begin=@dt_end
,@dt_end=@dt
select @i=datediff(day,@dt_begin,@dt_end)+1
,@re=@i/7*2
,@dt=dateadd(day,@i/7*7-1,@dt_begin)
while @dt<@dt_end
select @re=case when datepart(weekday,@dt) in(1,7)
then @re+1 else @re end
,@dt=@dt+1
return(@i-@re)
end
go--调用
select dbo.f_workday('2004-06-20','2004-06-27')
drop function [dbo].[f_workday]
GO--如果是得到指定月份,稍改一下就行了
create function f_workday(
@年月 varchar(7) --要查询的年月,格式要求:2004-7
)returns int
as
begin
declare @dt_begin datetime,@dt_end datetime
select @dt_begin=@年月+'-01'
,@dt_end=dateadd(month,1,@dt_begin)-1
declare @dt datetime,@re int,@i int
if @dt_begin>@dt_end
select @dt=@dt_begin
,@dt_begin=@dt_end
,@dt_end=@dt
select @i=datediff(day,@dt_begin,@dt_end)+1
,@re=@i/7*2
,@dt=dateadd(day,@i/7*7-1,@dt_begin)
while @dt<@dt_end
select @re=case when datepart(weekday,@dt) in(1,7)
then @re+1 else @re end
,@dt=@dt+1
return(@i-@re)
end
go--调用
select dbo.f_workday('2004-07')