如何为特定日期选择行,忽略SQL Server中的时间

Den*_*ail 42 sql sql-server-2005

给定一个带有datetime列的表,如何查询日期与我指定的值匹配但忽略时间部分的行?

例如, select * from sales where salesDate = '11/11/2010'

对于此查询,我们不关心时间.其他查询需要时间组件,因此我们不能仅存储日期组件.

谢谢!

Ode*_*ded 53

您可以在比较时删除时间组件:

SELECT * 
FROM sales 
WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010'
Run Code Online (Sandbox Code Playgroud)

另一种方法是将选择更改为涵盖日期开始和结束之间的所有时间:

SELECT * 
FROM sales 
WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999'
Run Code Online (Sandbox Code Playgroud)

  • 我没有得到你的解决方案的结果 (2认同)
  • 可以这样做: SELECT * FROM sales WHERE CAST(salesDate as DATE) = '11/11/2010' (2认同)

小智 10

我知道这个问题已经有一段时间了,但我只是在找同样的答案,发现这似乎是最简单的解决方案:

select * from sales where datediff(dd, salesDate, '20101111') = 0
Run Code Online (Sandbox Code Playgroud)

我实际上更多地使用它来查找最后一两天内的内容,所以我的版本看起来像这样:

select * from sales where datediff(dd, salesDate, getdate()) = 0
Run Code Online (Sandbox Code Playgroud)

通过将今天的0改为1,我得到昨天的交易,2是前一天,依此类推.如果你想要上周的所有内容,只需将等于更改为小于或等于:

select * from sales where datediff(dd, salesDate, getdate()) <= 7
Run Code Online (Sandbox Code Playgroud)