在SQL Server表中,我有一个名为Timestamp的字段,它是一个'datetime'字段。在我创建的屏幕上,用户将传递一个日期(没有时间),我需要返回该日期的所有记录。
只是做Timestamp = @Date似乎不起作用,除非字段中的时间是00:00:00。这样做最有效的方法是什么?
答案 0 :(得分:6)
由于您使用的是SQL Server 2008,因此可以使用DATE
数据类型。
在
之间进行比较 CAST(Timestamp AS DATE) = @Date
这应该起作用,只看日期 - 没有时间部分。
答案 1 :(得分:2)
通常,您应该将特定日期的数据视为属于某个范围的数据,而不是单个时间点。理想情况下,您的查询应使用范围,例如:
WHERE [Timestamp] >= @Date
AND [Timestamp] < DATEADD(DAY, 1, @Date)
在这种情况下,幸运的是,优化器很聪明,如果对列使用CONVERT(DATE, [timestamp])
,它仍然会使用索引。但是在很多情况下你需要小心,因为这通常会使你的子句不可思议。
PS Timestamp
是一个可怕的专栏名称。它是SQL Server中的数据类型,与日期或时间无关。
答案 2 :(得分:0)