如何在Sql server 2008R2中搜索日期时间

时间:2014-06-24 09:48:46

标签: sql sql-server datetime

我遇到了SQL搜索问题。我试图在datetime的帮助下搜索,因为在我的项目中,时间非常重要。当我使用像这样的查询

where registration_date = '2014-06-19 00:12:08.940' 

它确实有效,但一旦我尝试使用

进行搜索
where registration_date like '2014-06-19%' 

我没有结果。因为我想搜索在特定日期(包括时间)发生的所有注册,我假设我不知道具体时间...

5 个答案:

答案 0 :(得分:3)

只需搜索至少在该日期之后或之后的所有内容,并且比第二天更早。

    registration_date >= '2014-06-19'
AND registration_date < '2014-06-20'

答案 1 :(得分:1)

您必须投射到目前为止比较两个相等的日期。例如

CAST(registration_date AS DATE) = CAST('2014-06-19' AS DATE)

替代方案:

DECLARE @DateToFilter DATE = (CAST('2014-06-19' AS DATE))    
[..]
WHERE registration_date >= @DateToFilter
AND registration_date < DATEADD(d, 1, @DateToFilter)

编辑: 关于性能,假设在日期列上存在索引,可以在两种情况下使用索引(是的,CAST(x AS DATE)是SARGable)。对性能差异herehere进行了非常有趣的分析。一如既往,测试。

答案 2 :(得分:1)

间隔搜索:

WHERE registration_date >= '2014-06-19 00:00:00' AND registration_date < '2014-06-20 00:00:00'

当您搜索特定时间时,请在两种情况下使用相同的值,当您搜索一天时,请使用上述格式。

答案 3 :(得分:0)

试试这个

where convert(date,registration_date) = '2014-06-19' 

它也适用于

答案 4 :(得分:0)

如果您投射了两个部分,那么所有具有相同日期的数据都会像

一样
CAST(registration_date AS DATE) = CAST('2014-06-19' AS DATE)
or 
Convert(varchar(10), registration_date,103) = Convert(varchar(10),'2014-06-19' ,103)

或者您可以按上述日期范围进行搜索

 registration_date 
 between cast( getdate() as date ) and
 dateadd(dd, 1, cast( getdate() as date ))