在SQL Server表中,我有一个名为Timestamp的字段,它是'datetime'字段。在我创建的屏幕上,用户将传入一个日期(无时间),并且我需要返回该日期的所有记录。SQL - 将date参数与日期时间进行比较
只要做Timestamp = @Date似乎不工作,除非在该领域的时间是00:00:00。做这件事最有效的方法是什么?
在SQL Server表中,我有一个名为Timestamp的字段,它是'datetime'字段。在我创建的屏幕上,用户将传入一个日期(无时间),并且我需要返回该日期的所有记录。SQL - 将date参数与日期时间进行比较
只要做Timestamp = @Date似乎不工作,除非在该领域的时间是00:00:00。做这件事最有效的方法是什么?
由于您使用的是SQL Server 2008,因此可以使用DATE
数据类型。
做
CAST(Timestamp AS DATE) = @Date
之间的比较,这应该工作,并期待就在该日期 - 没有时间部分。
一般而言,您应该将特定日期的数据视为属于某个范围内的数据,而不是某个时间点的数据。因此,理想的查询应该使用范围,如:
WHERE [Timestamp] >= @Date
AND [Timestamp] < DATEADD(DAY, 1, @Date)
在这种情况下,幸运的是,优化很聪明,如果你使用CONVERT(DATE, [timestamp])
对列将仍然使用索引。但在很多情况下,您需要小心,因为这通常会使您的子句不可靠。
PS Timestamp
是一个可怕的列名称。这是SQL Server中的一种数据类型,与日期或时间无关。
你最好比较没有时间戳的日期。否则..如何获得结果? – 2012-03-09 22:40:24