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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL Server中选择特定日期的行,忽略时间。相关的知识,希望对你有一定的参考价值。

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

例如,我可以这样做 select * from sales where salesDate = '11/11/2010'

对于这个查询,我们不关心时间。其他查询需要时间部分,所以我们不能只存储日期部分。

谢谢!

答案

可以在比较时去掉时间部分。

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'
WHERE salesDate BETWEEN '2020-05-18T00:00:00.00' AND '2020-05-18T23:59:59.999'
另一答案

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

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
另一答案
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)

如果只指定了日期,那就意味着总的午夜。如果你想确保时间间隔不重叠,可以用一对的 >=<

你可以在一条语句中完成,只是这个值要用两次。

另一答案

就像这样。

select 
  * 
from sales 
where salesDate >= '11/11/2010' 
  AND salesDate < (Convert(datetime, '11/11/2010') + 1)
另一答案
select 
  * 
from sales 
where 
  dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'
另一答案

试试这个

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'

以上是关于如何在SQL Server中选择特定日期的行,忽略时间。的主要内容,如果未能解决你的问题,请参考以下文章

如何提高 SQL Server 查询的性能以选择具有值的行不在子查询中的一次计数

如何从SQL表中选择特定行并在SQL Server中连接多个表?

如何通过在 SQL Server 中选择周数来获取开始日期和结束日期

如何比较sql server中忽略秒的两个日期

如何在 SQL Server 2008 的 where 子句中仅比较日期并忽略时间

SQL Server:根据多个条件从组中选择特定行