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

时间:2010-11-11 15:24:35

标签: sql sql-server-2005

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

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

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

谢谢!

7 个答案:

答案 0 :(得分:51)

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

SELECT * 
FROM sales 
WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010'

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

SELECT * 
FROM sales 
WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999'

答案 1 :(得分:9)

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

select * from sales where datediff(dd, salesDate, '20101111') = 0

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

select * from sales where datediff(dd, salesDate, getdate()) = 0

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

select * from sales where datediff(dd, salesDate, getdate()) <= 7

答案 2 :(得分:1)

select * from sales where salesDate between '11/11/2010' and '12/11/2010' --if using dd/mm/yyyy

更正确的方法:

DECLARE @myDate datetime
SET @myDate = '11/11/2010'
select * from sales where salesDate>=@myDate and salesDate<dateadd(dd,1,@myDate)

如果仅指定日期,则表示午夜总时间。如果您想确保间隔不重叠,请使用一对>=<

切换间隔

你可以在一个单一的陈述中完成,但只是两次使用该值。

答案 3 :(得分:0)

这样的事情:

select 
  * 
from sales 
where salesDate >= '11/11/2010' 
  AND salesDate < (Convert(datetime, '11/11/2010') + 1)

答案 4 :(得分:0)

select 
  * 
from sales 
where 
  dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'

答案 5 :(得分:0)

我知道这是一个古老的话题,但我设法以这种简单的方式做到了:

select count(*) from `tablename`
where date(`datecolumn`) = '2021-02-17';

答案 6 :(得分:-2)

试试这个:

true
select cast(salesDate as date) [date] from sales where salesDate = '2010/11/11'
false
select cast(salesDate as date) [date] from sales where salesDate = '11/11/2010'