SQL where,case between或date date与datetime

时间:2016-04-19 20:05:35

标签: sql date datetime case

我试图弄清楚此查询中是否有太多移动件。我需要检查一个日期是星期五,相应的值是从下一个星期一开始。任何其他日子,它是第二天。我可以在第二天得到#39;部分工作没有问题,但周五到周一的部分失败。让它变得有点困难的是a.Change_Date是日期格式而b.Load_Date是DateTime格式。

SELECT *
  FROM a, b
  where a.account_number = b.account_Number
  and a.Change_date 
  case  when datepart(dw, a.Change_date) = 5
            then BETWEEN (CAST(DATEADD(dd, -4, b.Load_Date) AS DATE)) AND (CAST(DATEADD(dd, -3, b.Load_Date) AS DATE))
        else
            = CAST(b.Load_Date) AS DATE) and CAST(DATEADD(dd, -1, b.Load_Date) AS DATE)
    end
  and a.Account_Number in 
(XXXXX.....)

有关如何实现这一点的任何想法都表示赞赏。这应该返回最后一个和语句中account_numbers存在的所有行。我今天看了太长时间并没有取得足够的进展。

1 个答案:

答案 0 :(得分:0)

我不知道您的完整架构,但这里有一些局部变量的快速示例。

declare @somedate datetime = '2016-04-15 15:17:00.497'--getdate()
declare @nextDate datetime

select @nextDate = case when datepart(dw,@somedate)=6 then @somedate+3 else @somedate+1 end 

select @nextDate NextDate