我正在遇到一个 SQL 搜索问题。我正在尝试使用日期时间进行搜索,因为在我的项目中时间非常重要。当我使用以下查询时:
where registration_date = '2014-06-19 00:12:08.940'
功能可以正常运作,但一旦我尝试进行搜索
where registration_date like '2014-06-19%'
我没有得到任何结果。因为我想搜索特定日期(包括时间)发生的所有注册,我假设我不知道具体时间...
我正在遇到一个 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'
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)。这里和这里有一个非常有趣的性能差异分析here和here。如往常一样,请进行测试。
registration_date
上有索引,SQL Server 可以高效地查找到该范围。因此建议使用指定范围的方式,避免使用 CAST
。 - ta.speot.is按时间间隔搜索:
WHERE registration_date >= '2014-06-19 00:00:00' AND registration_date < '2014-06-20 00:00:00'
当您搜索特定时间时,请在两个条件中使用相同的值;当您搜索一天时,请使用上述格式。
试试这个
where convert(date,registration_date) = '2014-06-19'
它也适用于之间
你可以将两个部分都转换一下,这样所有日期相同的数据就可以被找到了。
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 ))
registration_date >= '2014-06-19' AND registration_date < '2014-06-20'
- ta.speot.is