SQL查询,从当前日期开始的特定时间段内的信息

时间:2012-01-06 10:32:20

标签: sql

嗨,大家好,希望你们可以提供帮助,我已经做了一次搜索,但似乎无法找到我正在寻找的东西......

我正在尝试编写SQL查询,以向我展示自运行查询(当前日期)之日起12周或84天开始的所有员工。到目前为止我已经得到了这个,但它并没有返回我期待的结果,我在开始日期超过84天的时间里得到了一些记录。

.... WHERE (EmployeeJobs.DateTo IS NULL or EmployeeJobs.DateTo = dateadd(d,datediff(d,0,getdate()),84))

我需要包含一个NULL语句,但遗憾的是并非所有记录都包含日期。

非常感谢任何帮助

5 个答案:

答案 0 :(得分:1)

试试这个,它适用于所有版本的Sql Server 2000 +

....
WHERE
  (EmployeeJobs.DateTo IS NULL
   or
   CONVERT(varchar, EmployeeJobs.DateTo, 112) = CONVERT(varchar, dateadd(d,-84,GETDATE()), 112)
  )

但是如果您运行它@sql server 2008+,您可以简化工作:

....
WHERE
  (EmployeeJobs.DateTo IS NULL
   or
   cast(EmployeeJobs.DateTo as DATE) = CAST(dateadd(d,-84,GETDATE()) as DATE)
  )

OR 可以使用索引

....
WHERE
  (EmployeeJobs.DateTo IS NULL
   or
   EmployeeJobs.DateTo >= CAST(dateadd(d,-84,GETDATE()) as DATE)
   AND
   EmployeeJobs.DateTo < CAST(dateadd(d,-83,GETDATE()) as DATE)

  )

答案 1 :(得分:1)

where
  EmployeeJobs.DateTo IS NULL
  or
  datediff(d, EmployeeJobs.DateTo, getdate()) = 84

如果您使用的是SQL Server 2008,那么

where
  EmployeeJobs.DateTo IS NULL
  or
  cast(EmployeeJobs.DateTo as date) = cast(getdate() - 84 as date)

答案 2 :(得分:1)

试试这样:

WHERE
  (EmployeeJobs.DateTo IS NULL
   or
   convert(varchar, EmployeeJobs.DateTo, 112) = convert(varchar, DATEADD(day, -84, getdate(), 112)
  )

答案 3 :(得分:0)

你有DateFrom和DateTo字段吗?这两个日期的范围表明他们是在这两个日期之间受雇的? NULL DateTo意味着他们还没有离开?你想要84天前就业的人吗?

WHERE
      (EmployeeJobs.DateFrom <= dateadd(d, datediff(d,0,getdate()) - 84, 0))
  AND (EmployeeJobs.DateTo   >= dateadd(d, datediff(d,0,getdate()) - 84, 0) OR EmployeeJobs.DateTo IS NULL)

答案 4 :(得分:0)

或者(因为已经使用了函数,对性能的影响就在那里):

WHERE
 -- get difference in days
 DateDiff(dd,
  -- lower date, replace Nulls
  IsNull(EmployeeJobs.DateTo, GetDate()),
  -- highest date
  GetDate()
 )
 -- whatever the criteria, in this case equal to exact 84 days
 = 84