如何在sql server中包含一周中最后一天的小时数

时间:2015-10-22 03:16:38

标签: sql sql-server sql-server-2008

我正在撰写此查询:

SELECT 
    DATEADD(wk, DATEDIFF(wk, 0, vr_EmployeeLog.DateTimeStart), 0) period_start,
    DATEADD(wk, DATEDIFF(wk, 0, vr_EmployeeLog.DateTimeStart), 6) period_end 
FROM
    vr_EmployeeLog

我得到了结果:

period_start   2015-10-12 00:00:00.000
period end     2015-10-18 00:00:00.000

但是我在2015-10-18 01:56:00.000 AM获得了记录,并且不包含在结果中。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

尝试使用数天而不是数周。

SELECT 
    DATEADD(wk,DATEDIFF(wk,0,vr_EmployeeLog.DateTimeStart),0) period_start,
    DATEADD(day,DATEDIFF(day,0,vr_EmployeeLog.DateTimeStart),7) period_end         
FROM vr_EmployeeLog

但要通过"日期范围选择数据"使用大于或等于然后(第二天)

的组合
SELECT *
FROM vr_EmployeeLog
WHERE vr_EmployeeLog.DateTimeStart >= '20151012'
AND vr_EmployeeLog.DateTimeStart < '20151019' --<< "the next day"

不要试图在&#34;之间使用&#34;为此,请始终使用&gt; =和&lt;

  

日期和时间范围的最佳做法是避免BETWEEN和   总是使用表格:

     

WHERE col&gt; =&#39; 20120101&#39; AND col&lt; &#39; 20120201&#39;此表单适用于所有人   类型和所有精度,无论时间部分是什么   适用。

Itzik Ben-Gan

Bad habits to kick : mis-handling date / range queries

答案 1 :(得分:0)

我认为你应该尝试:

SELECT 
    DATEADD(wk,DATEDIFF(wk,0,DateTimeStart),0) period_start,
    DATEADD(day, 6, DATEADD(wk,DATEDIFF(wk,0,DateTimeStart),0)) period_end
FROM vr_EmployeeLog

--ADD 6 days into period_start