如何在 SQL Server 2005 或更早版本中选择特定日期的行,忽略时间

问题描述 投票:0回答:11

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

例如,

select * from sales where salesDate = '11/11/2010'

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

谢谢!

sql sql-server-2005
11个回答
73
投票

比较时可以去掉时间成分:

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'

16
投票

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

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

5
投票

试试这个:

SELECT * FROM sales WHERE CAST(salesDate AS date) = '2010-10-10'

2
投票

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

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

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)

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

>=
<

进行切换

您可以在一条语句中完成此操作,但只是该值被使用了两次。


0
投票

类似这样的:

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

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

0
投票

您也可以对 Postgres SQL 执行此操作。

SELECT * FROM sales
WHERE EXTRACT(DATE FROM salesDate) = '2010-11-11';

SELECT * FROM sales
WHERE CAST(salesDate AS DATE) = '2010-11-11';

0
投票

那就简单多了,只需将日期时间转换为日期即可:

SELECT * FROM sales
WHERE CONVERT(DATE, salesDate) = '2010-11-11';

-1
投票

这对我有用:

SELECT *
FROM tableName
WHERE date LIKE '%2022-11-19%'

-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'
© www.soinside.com 2019 - 2024. All rights reserved.