现在有个很急的问题,如何写SQL可以获取非周末的时间,要获得09年全年的时间如何写,比如现在是9月,得到如下数据
......
2009-9-1
2009-9-2
2009-9-3
2009-9-4
2009-9-7
2009-9-8
2009-9-9
2009-9-10
2009-9-11
.....谢谢拉,急用。
......
2009-9-1
2009-9-2
2009-9-3
2009-9-4
2009-9-7
2009-9-8
2009-9-9
2009-9-10
2009-9-11
.....谢谢拉,急用。
from tb
where DATEPART(WEEK,时间字段)=7 or DATEPART(WEEK,时间字段)=1
drop function [dbo].[f_WorkDay]
GO--计算两个日期相差的工作天数
CREATE FUNCTION f_WorkDay(
@dt_begin datetime, --计算的开始日期
@dt_end datetime --计算的结束日期
)RETURNS int
AS
BEGIN
DECLARE @workday int,@i int,@bz bit,@dt datetime
IF @dt_begin>@dt_end
SELECT @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET @bz=0
SELECT @i=DATEDIFF(Day,@dt_begin,@dt_end)+1,
@workday=@i/7*5,
@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
WHILE @dt_begin<=@dt_end
BEGIN
SELECT @workday=CASE
WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
THEN @workday+1 ELSE @workday END,
@dt_begin=@dt_begin+1
END
RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END)
END
GO
from tb
where DATEPART(WEEK,时间字段)<>7 or DATEPART(WEEK,时间字段)<>1
修改
from tb
where DATEPART(WEEKDAY,时间字段)<>7 or DATEPART(WEEKDAY,时间字段)<>1
再修改 晕死
SELECT DATEADD(DAY,NUMBER,'2009-1-1'),DATENAME(DW,DATEADD(DAY,NUMBER,'2009-1-1'))
FROM MASTER..SPT_VALUES WHERE TYPE='P'
AND YEAR(DATEADD(DAY,NUMBER,'2009-1-1'))=2009
AND DATEPART(DW,DATEADD(DAY,NUMBER,'2009-1-1')) >1
AND DATEPART(DW,DATEADD(DAY,NUMBER,'2009-1-1')) <7
不帖结果了,乱
create function fn_test(@begin datetime,@end datetime)
returns int
As
BEGIN
declare @i int,@j int
set @i=0
set @j=0
if @end> @begin
begin
while dateadd(d,@i,@begin) <=@end
begin
if datepart(weekday,dateadd(d,@i,@begin)) not in(1,7)
set @j=@j+1
set @i=@i+1
end
end
return @j END