想請問如何的找出某月初以星期三為起始月尾也以星期三為終止點,如6/1是星期六那就設6/5星期三為本月開始點,月尾6/30星期日,那就在往後退到7/3星期三為月尾的終止點,請問先進老師,SQL的話我該怎麼抓這樣的範圍,或是寫程式我該怎麼寫比較好..
我是用ASP.NET VB ,謝謝大家的指教..
紅色框線為每個月要抓的規則 ,
試想:
(公式就懶得寫了, 原理知道就可以處理.)
(不過結束應該算到週二的23:59:59吧?)
如果用T-SQL的話, 大約這樣, 如果沒寫錯的話, 你自己測吧
Exec [dbo].[Test1] 2013,7,4
第三個參數4代表周三, 周日為1, 周六為7
Create PROCEDURE [dbo].[Test1] (
@year as int
,@month as int
,@dw as int
) AS
BEGIN
SET NOCOUNT ON;
DECLARE @date1 as datetime;
DECLARE @date2 as datetime;
DECLARE @date3 as datetime;
DECLARE @date4 as datetime;
DECLARE @dw1 as int;
DECLARE @dw2 as int;
--取得指定月份的第一天
SELECT @date1=convert(datetime, convert(varchar(4), @year) +'/'+ convert(varchar(2), @month) +'/1');
Select @dw1=DATEPART(dw, @date1);
if (@dw1 = @dw)
select @date3 = @date1;
else if (@dw1 < @dw)
select @date3 = DATEADD(dd, (@dw - @dw1), @date1);
else
select @date3 = DATEADD(dd, (7 + @dw - @dw1), @date1);
--取得次月的第一天
SELECT @date2=dateadd(mm,1,DATEADD(mm,DATEDIFF(mm,0,@date1),0));
Select @dw2=DATEPART(dw, @date2);
if (@dw2 = @dw)
select @date4 = @date2;
else if (@dw2 < @dw)
select @date4 = DATEADD(dd, (@dw - @dw2), @date2);
else
select @date4 = DATEADD(dd, (7 + @dw - @dw2), @date2);
select @date1 as D1, @date2 as D2, @date3 as D3, @date4 as D4;
END