我遇到了SQL搜索问题。我试图在datetime的帮助下搜索,因为在我的项目中,时间非常重要。当我使用像这样的查询
where registration_date = '2014-06-19 00:12:08.940'
它确实有效,但一旦我尝试使用
进行搜索where registration_date like '2014-06-19%'
我没有结果。因为我想搜索在特定日期(包括时间)发生的所有注册,我假设我不知道具体时间...
答案 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)。对性能差异here和here进行了非常有趣的分析。一如既往,测试。
答案 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 ))