--如果是要将日期转换成工作日declare @日期 datetime set @日期='2004-5-8'select case datepart(weekday,@日期) when 1 then dateadd(day,1,@日期) when 7 then dateadd(day,2,@日期) else @日期 end
select min(日期) from tab where 日期>=datepart(weekday,@日期)
select min(dd) from (select a.d,a.w dd from #temp a join tab b on a.w=b.日期) t1 where t1.d<(select case datepart(weekday,@日期) when 1 then 8 else datepart(weekday,@日期) end)
csdn能删自己的回复吗?select min(dd) from (select a.d,a.w dd from #temp a join tab b on a.w=b.日期) t1 where t1.d>=(select case datepart(weekday,@日期) when 1 then 8 else datepart(weekday,@日期) end)
to jiangchuandong(奋斗成男人) :请举例说明,谢谢。我也知道用case,但是里面应该有个算法吧。
--sorry,那天晚上喝了点,迷迷糊糊的,本来有个临时表的,忘了贴了 --再写一遍吧create table #temp ( d int, dd varchar(10) )--如果下面“星期一.....”这些字段值和你的工作日表中不一样,就改过来 insert into #temp values(2,'星期一') insert into #temp values(3,'星期二') insert into #temp values(4,'星期三') insert into #temp values(5,'星期四') insert into #temp values(6,'星期五') insert into #temp values(7,'星期六') insert into #temp values(8,'星期日')declare @日期 datetime --你要查询的日期--tab为工作日表select min(dd) from (select a.d,a.w dd from #temp a join tab b on a.w=b.日期) t1 where t1.d>=(select case datepart(weekday,@日期) when 1 then 8 else datepart(weekday,@日期) end)
set @日期='2004-5-8'select case datepart(weekday,@日期)
when 1 then dateadd(day,1,@日期)
when 7 then dateadd(day,2,@日期)
else @日期 end
(select a.d,a.w dd from #temp a join tab b on a.w=b.日期) t1
where t1.d<(select case datepart(weekday,@日期)
when 1 then 8
else datepart(weekday,@日期)
end)
(select a.d,a.w dd from #temp a join tab b on a.w=b.日期) t1
where t1.d>=(select case datepart(weekday,@日期)
when 1 then 8
else datepart(weekday,@日期)
end)
数据库中的工作日可能只有几(从1到5)天(是由单位具体定的),并不是通常的工作日。
--再写一遍吧create table #temp
(
d int,
dd varchar(10)
)--如果下面“星期一.....”这些字段值和你的工作日表中不一样,就改过来
insert into #temp values(2,'星期一')
insert into #temp values(3,'星期二')
insert into #temp values(4,'星期三')
insert into #temp values(5,'星期四')
insert into #temp values(6,'星期五')
insert into #temp values(7,'星期六')
insert into #temp values(8,'星期日')declare @日期 datetime --你要查询的日期--tab为工作日表select min(dd) from
(select a.d,a.w dd from #temp a join tab b on a.w=b.日期) t1
where t1.d>=(select case datepart(weekday,@日期)
when 1 then 8
else datepart(weekday,@日期)
end)