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

3

我正在遇到一个 SQL 搜索问题。我正在尝试使用日期时间进行搜索,因为在我的项目中时间非常重要。当我使用以下查询时:

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

功能可以正常运作,但一旦我尝试进行搜索

where registration_date like '2014-06-19%' 

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


registration_date >= '2014-06-19' AND registration_date < '2014-06-20' - ta.speot.is
5个回答

3

只需搜索所有日期等于或晚于该日期,并早于下一天。

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

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。如往常一样,请进行测试。


@g2server 谢谢(cast)已经完成了工作,但还有一个问题,我如何在您上面的查询中添加“between”?您能否请修改一下? - user3770612
如果您在 registration_date 上有索引,SQL Server 可以高效地查找到该范围。因此建议使用指定范围的方式,避免使用 CAST - ta.speot.is

1

按时间间隔搜索:

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

当您搜索特定时间时,请在两个条件中使用相同的值;当您搜索一天时,请使用上述格式。


0

试试这个

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

它也适用于之间


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 ))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接