SQL Server 2008搜索日期
问题描述:
我需要搜索在特定日期输入的行。SQL Server 2008搜索日期
但是,我需要搜索的列的数据类型是datetime
,而参数的数据类型是Date
。
我可以使用查询像
Select result
from table
where
convert(date, Mycolumn) = @selectedDate
,但会影响查询的SARGability并不会使用在mycolumn
创建的索引。
我尝试使用下面的查询:
Select result
from table
where
Mycolumn
BETWEEN @selectedDate AND Dateadd(s, -1, Dateadd(D, 1, @selectedDate))
然而,这并不工作,因为@selectedDate
是日期型,第二,不能添加或删除。
有人可以帮我一个工作查询吗?
谢谢。
答
Select result
from table
where
Mycolumn >= @selectedDate
AND Mycolumn < Dateadd(D, 1, @selectedDate)
+0
谢谢!这将做我想要的:) – IamCP 2012-02-06 17:20:59
答
如果你需要做这些搜索了很多,你可以添加一个计算,坚持执行转换到DATE
柱,把一个指标就可以了,然后在该列
ALTER TABLE dbo.YourTable
ADD DateOnly AS CAST(MyColumn AS DATE) PERSISTED
搜索由于它是持续的,所以只有在MyColumn
值发生变化时才会(重新)计算,例如它不是对存储函数的“隐藏”调用。由于它的持续存在,它也可以被索引并使用就像任何其他的定期专栏:
CREATE NONCLUSTERED INDEX IX01_YourTable_DateOnly ON dbo.YourTable(DateOnly)
然后执行:
SELECT result FROM dbo.YourTable WHERE DateOnly = @SelectedDate
由于额外的信息被存储在表中,你会使用更多的存储空间 - 因此您正在进行经典的“空间与速度”折衷;你需要更多的空间,但你的速度会更快。
答
这是我的理解是使用:
convert(date, Mycolumn) = @selectedDate
是优化搜索。它将使用Mycolumn上的索引(如果存在)。这可以通过使用执行计划轻松确定。
看看这里:[http://*.com/questions/4156011/how-to-select-rows-for-a-specific-date-ignoring-time] [1] – ParPar 2012-02-06 07:29:54