2015-10-22 14 views
1

我寫此查詢:如何包含小時一週的SQL Server中的最後一天

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 

,但我得到了period_end最新記錄2015-10-18 01:56:00.000 AM,其中不包括結果。

我該如何做到這一點?

+0

什麼是列的類型? – Dai

+0

datetime列類型 – maxspan

+0

我需要使用DateADD和DateDiff。 where子句不允許使用 – maxspan

回答

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" 

不要被誘惑到「之間的」使用爲此,總是使用> =和<

帶有日期和時間的最好實踐的範圍是爲了避免與地之間 始終使用以下形式:

WHERE col> ='20120101'AND col <'20120201'此表格適用於所有 類型和所有精度,無論時間部分是否適用 。

Itzik Ben-Gan

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

+0

我不能使用where子句來查詢它應該是DateAdd和DateDiff – maxspan

+0

對於case表達式也是如此;順便提一下,你應該問一個問題,就是提供所有約束條件(如評論),然後提供樣本數據和預期結果。 –

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 
+0

這沒有奏效。給出了相同的結果。 – maxspan

+0

您可以使用強制轉換或轉換將日期時間類型的結果轉換爲日期類型 –

相關問題