2016-12-03 75 views
0

我有一個像下面日期時間之間獲得行的值

Id DateTimeIn    DateTimeOut 
1  2016-12-03 09:05:22.123 2016-12-03 09:05:22.123 
2  2016-12-03 10:00:00.415 2016-12-03 10:40:00.415 
3  2016-12-03 11:04:52.253 2016-12-03 11:35:22.123 

我想提出的時間範圍之間進來的值的表。

declare @DateTimeIn date = '2016-12-03 11:00:52.213' 
declare @DateTimeOut date = '2016-12-03 11:45:52.213' 

Id 3這一行出現在輸入範圍內。所以我寫下面的查詢將該行作爲輸出。

SELECT * 
FROM TimesheetEntries 
WHERE @DateTimeIn BETWEEN DateTimeIn AND DateTimeOut 
    OR @DateTimeOut BETWEEN DateTimeIn AND DateTimeOut 

但它沒有帶來任何結果。我不知道我的查詢中有什麼問題。請幫幫我!

+1

如果你有型DATE'的'的變量,你不能用**時間部分初始化**!如果您需要時間部分,請使用'DATETIME2(n)'而不是 –

回答

1

確保您的變量的類型爲datetime,並且您正在選擇的列的類型爲datetime

declare @DateTimeIn datetime = '2016-12-03 11:00:52.213' 
declare @DateTimeOut datetime = '2016-12-03 11:45:52.213' 

SELECT * FROM TimesheetEntries 
WHERE @DateTimeIn BETWEEN DateTimeIn and DateTimeOut 
OR @DateTimeOut BETWEEN DateTimeIn and DateTimeOut 
+0

是的。我在查詢時才知道我很生氣。 :'( –

+0

@ProgrammingNewbie所以你想出來了嗎? –

+2

更好的是:使用'DATETIME2(n)'而不是'DATETIME'(它具有更好的精度和更少的麻煩/問題....) –

0
DECLARE @DateTimeIn datetime = '2016-12-03 11:00:52.213' 
DECLARE @DateTimeOut datetime = '2016-12-03 11:45:52.213' 

SELECT * FROM TimesheetEntries 
WHERE 
( 
    DATEDIFF(DAY,DateTimeIn,@DateTimeIn) <= 0 AND 
    DATEDIFF(DAY,DateTimeIn,@DateTimeOut) >= 0 
) OR 
( 
    DATEDIFF(DAY,DateTimeOut,@DateTimeIn) <= 0 AND 
    DATEDIFF(DAY,DateTimeOut,@DateTimeOut) >= 0 
)