在SQL查询中查找日期之间的名称

时间:2016-10-20 04:19:55

标签: sql-server

我有一张名为Emp的桌子。其中有3列Name,LastWorkingDay,LeaveValue,DateofReturn。我想写一个查询:

  • 最后工作日和DateofReturn介于当前整周
  • 之间

Emp

我的表格应该返回' 2016-10-10'和' 2016-10-16'即整整一周。因此,只应删除前2个记录,并显示最后3个记录。

SELECT [Name]
  ,[Last_Working_Day]
  ,[Date_of_Return]
  ,[LeaveValue]
  ,NewWeekStatus
  FROM [Emp]
  INNER JOIN [Date]
  ON [Emp].Last_Working_Day = [Date].FullDate

  WHERE [Date].NewWeekStatus = 'Current Full Week'

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您需要先找出当前的第一天和最后一天,如下所示。

 Declare @StartWeek AS datetime, @EndWeek AS datetime
 select  @StartWeek=     DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
 select   @EndWeek  = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 6)

然后您可以在查询中使用这两个日期。

SELECT [Name]
  ,[Last_Working_Day]
  ,[Date_of_Return]
  ,[LeaveValue]
  ,NewWeekStatus
  FROM [Emp]
  INNER JOIN [Date]
  ON [Emp].Last_Working_Day = [Date].FullDate
  WHERE [Date].NewWeekStatus = 'Current Full Week'
  AND [Emp].Last_Working_Day BETWEEN @StartWeek  AND @EndWeek
  AND [Emp].Date_of_Return BETWEEN @StartWeek  AND @EndWeek

然而,你的欲望输出需要考虑上周而非本周。

答案 1 :(得分:0)

看看这个:

SELECT [Name]
  ,[Last_Working_Day]
  ,[Date_of_Return]
  ,[LeaveValue]
  ,NewWeekStatus
  FROM [Emp]
  INNER JOIN [Date]
  ON [Emp].Last_Working_Day = [Date].FullDate
  WHERE [Date].NewWeekStatus = 'Current Full Week' and (Date_of_return>='2016-10-10' and Date_of_return<='2016-10-16')