忽略最后一个星期四和星期四之间没有工作的记录

时间:2013-08-08 10:15:37

标签: sql sql-server-2008 datetime stored-procedures

我正在处理存储过程,用户从简单的Web应用程序传递付款类型,只返回这些付款类型。

对于信用卡付款,我想忽略上周四至本周四之间的任何记录。

我写了这个:

SELECT DATEADD(day, (DATEDIFF (day, 4, GETDATE()) / 7) * 7, 3) 
SELECT CONVERT(datetime, CONVERT(nvarchar(20), DATEADD(day, 4 - DATEPART(dw, GETDATE()), GETDATE()), 103))

发现了上周四和周四的星期四。

然而,当我在我存储的Proc中使用它时,它仍会在这些日期之间返回记录。

这是使用它的存储过程的部分

ELSE IF @PaymentType = 'Credit Card'
BEGIN
    SELECT DISTINCT [Variable] 
      ,[Variable]
      ,[Variable]
      ,[Variable]
      ,[DueDate]
      ,[Variable]
      ,[Variable]
      ,[Variable]
      ,[Variable]
      ,[Variable]
      ,[Variable]
      ,[Variable]
    FROM MyTable
    WHERE  PaymentMethod = 'Credit Card' AND 
           [DueDate] NOT BETWEEN DATEADD(day, (DATEDIFF (day, 4, GETDATE()) / 7) * 7, 3) AND
           CONVERT(datetime, CONVERT(nvarchar(20), DATEADD(day, 4 - DATEPART(dw, GETDATE()), GETDATE()), 103))
    ORDER BY DueDate desc   
END

这是一些数据的屏幕截图(由于数据保护而无法再显示) enter image description here

对于我希望它工作的方式,它不应该返回这些记录(它们是本周的星期三,我想忽略)

我无法弄清楚为什么它会返回这些,所以任何帮助都会得到满足

1 个答案:

答案 0 :(得分:0)

只是一个更新,在修改转换部分后创建了一个问题,所以我删除了它并且它正常工作

WHERE  PaymentMethod = 'Credit Card' 
           AND [DueDate] NOT BETWEEN DATEADD(day, (DATEDIFF (day, 4, GETDATE()) / 7) * 7, 3) AND
           DATEADD(day, 4 - DATEPART(dw, GETDATE()), GETDATE())
    ORDER BY DueDate desc   

甚至不确定为什么我把那个转换部分放在那里