2012-08-16 179 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

相关问题