2016-12-03 72 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 
)