2012-08-16 178 views
1

我有一個存儲功能,它應該弄清楚工資單週我的開始日期。這是「星期四」然而,我的存儲過程總是讓我的開始日期爲「星期五」我的聲明和設置功能有什麼問題?我希望我的StartWeekDay是「星期四」 ...「lStartday」設置爲在帳戶表「5」我的代碼如下:如何找出每週開始日期

DECLARE @StartWeekDay int 
SET @StartWeekDay = (Select lStartDay From Account Where lLocationID = 1) 

DECLARE @CurrentDate DateTime 
SET @CurrentDate = GetDate() 
DECLARE @CurrentWeekDay int 
SET @CurrentWeekDay = DATEPART(dw,@CurrentDate) 

DECLARE @Diff int 
SET @Diff = @StartWeekDay - @CurrentWeekDay 

SET @Diff = Case When @Diff > 0 Then -6 When @Diff = 0 Then 0 Else @Diff End 

-- 
DECLARE @DaysToStart int 
SET @DaysToStart = (DatePart(dw,@CurrentDate) - @StartWeekDay) 
IF @DaysToStart <= .1 
    BEGIN 
    SET @DaysToStart = @DaysToStart + 7 
    END 

DECLARE @myStartWeekDate DateTime 
--SET @myStartWeekDate = dbo.DateOnly(DATEADD(d,@Diff,@CurrentDate)) 
SET @myStartWeekDate = Convert(nvarchar,DateAdd(d,[email protected],@CurrentDate),101) -- getting DATE only 
-- 
+2

你怎麼落得寶石李當@Diff = 0 Then 0 Else @ Diff'? – 2012-08-16 13:24:53

回答

1

lStartDay = 5總會作罷週五。您需要添加4

DECLARE @DaysToStart int 
SET @DaysToStart = (DatePart(dw,@CurrentDate) - @StartWeekDay) 
IF @DaysToStart <= .1 
    BEGIN 
    SET @DaysToStart = @DaysToStart + 7 
    END 

如果您聲明@DaysToStart週四和日期部分也返回INT,爲什麼.1比較?

+0

本週總是以「星期天」開始?那麼......星期四會是5號吧? – Shmewnix 2012-08-16 13:14:31

+0

是的,我的錯誤,看到編輯 – Apurav 2012-08-16 13:16:30

+0

這部分沒關係......我已經試過評論它,它仍然沒有做任何事情...基本上我只是試圖找出有多少天分開當前日期來自startweek。 – Shmewnix 2012-08-16 13:22:47

4

下面的查詢是四捨五入日期的一週beginiing的標準方法。然而,這被視爲一個星期一......

DATEADD(WEEK, DATEDIFF(WEEK, 0, @YourDate), 0) 

如果通過3抵消你的價值觀,這將改變功能向下舍到上週四...

DATEADD(WEEK, DATEDIFF(WEEK, 0, @YourDate-3), 3) 

編輯:這應該是3,4不...

SET @yourDate = getDate() 
SET @firstDay = 3 
SET @RoundedDate = DATEADD(WEEK, DATEDIFF(WEEK, 0, @[email protected]), @firstDay) 

Value of @firstDay | Day of week this will round to 
--------------------+-------------------------------- 
     0   |  Monday 
     1   |  Tuesday 
     2   |  Wednesday 
     3   |  Thursday 
     4   |  Friday 
     5   |  Saturday 
     6   |  Sunday 
+0

你在建議這個去哪裏? – Shmewnix 2012-08-16 13:24:54

+0

@Shmewnix - 它可以取代幾乎所有的邏輯。 – MatBailie 2012-08-16 13:28:43

0
 DECLARE @StartWeekDay int 
    SET @StartWeekDay = 5 

    DECLARE @CurrentDate DateTime 
    SET @CurrentDate = '8/24/2012' 
    DECLARE @CurrentWeekDay int 
    SET @CurrentWeekDay = DATEPART(dw,@CurrentDate) 
    SELECT @CurrentWeekDay; 

    DECLARE @Diff int 
    SET @Diff = @StartWeekDay - @CurrentWeekDay 

    SET @Diff = Case When @Diff > 0 Then -6 When @Diff = 0 Then 0 Else @Diff End 

    -- 
    DECLARE @DaysToStart int 
    SET @DaysToStart = (DatePart(dw,@CurrentDate) - @StartWeekDay) 
--change here to <1 and not <=1 that will add 8 and return friday at the end 
    IF @DaysToStart < 1 
     BEGIN 
     SET @DaysToStart = @DaysToStart + 7 
     END 
     SELECT @DaysToStart; 
    DECLARE @myStartWeekDate DateTime 
    --SET @myStartWeekDate = dbo.DateOnly(DATEADD(d,@Diff,@CurrentDate)) 
    SET @myStartWeekDate = Convert(nvarchar,DateAdd(d,[email protected],@CurrentDate),101) 
    SELECT @myStartWeekDate 
+0

這將'@ currentdate'設置爲定義的日期。該存儲過程得到'@ currentdate'作爲報告運行的日期......(參數通過程序傳遞) – Shmewnix 2012-08-16 13:26:06

+0

這僅僅是測試,你可以將其更改爲GETDATE() – Apurav 2012-08-16 13:33:35

相關問題