SQL 日期比较仅使用日期而不是时间

标签 sql sql-server tsql date-comparison

这原本是一个关于如何实现这一点的问题,因为我被困在某个部分,但我现在很好奇为什么会发生这种情况。我只需要比较日期而不是时间,如果时间没有差异的话就不会有问题。下面的代码显示了我最初尝试的查询

SELECT *
FROM Employee e
inner join OT_Hours o on o.Emp_ID=e.Emp_ID
inner join Position p on p.Position_ID=e.Position_ID
inner join Signup_Sheet s on s.Employee_ID=e.Emp_ID
WHERE e.Eligible_OT=1 and s.Day_Shift = 1 
and p.Position_Name = 'Controller' 
and Convert(Varchar(20),s.Date,101) = '07/26/2010'
and Convert(Varchar(20),o.Date,101) <='07/26/2010'
and Convert(Varchar(20),o.Date,101) > '07/26/2009'
and o.Quantity NOT IN(0.3) order by o.Date DESC

当我运行该查询时,我不会得到任何结果,但是当我删除倒数第二行时,它将返回 12 个结果 (<=),当我删除倒数第三行但保留倒数第二行时,它将返回 6 个结果( >)。查看数据后,我发现应该返回其中 4 个结果。现在是奇怪的部分。下面是我当前使用的代码。

SELECT DISTINCT o.Date, e.Emp_ID as Emp_ID, e.First_Name+ ' ' +e.Last_Name as Name, o.Quantity as Sum
FROM Employee e
left join OT_Hours o on o.Emp_ID=e.Emp_ID
left join Position p on p.Position_ID=e.Position_ID
left join Signup_Sheet s on s.Employee_ID=e.Emp_ID
WHERE e.Eligible_OT=1 and s.Day_Shift = 1 
and p.Position_Name = 'Controller' 
and Convert(Varchar(20),s.Date,101) = '07/26/2010'
and o.Date between '07/26/2009' and '07/26/2010'
and o.Quantity NOT IN(0.3) order by o.Date DESC

此查询将返回结果,但我也像在 o.Date 高于和低于指定日期时进行的另一个查询一样对其进行了测试。当日期 <= 16 时返回结果,当 > 8 时返回结果。最终查询产生 6 个结果。现在,这不是我正在查询的生产数据库,而且我是唯一使用它的数据库,因此数据没有改变。有什么解释为什么会发生这种情况吗?我假设它与将其转换为 varchar 有关,并且无法正确比较,但这并不能解释为什么我会得到 12 <=, 6 > 然后最终没有结果。另外,如果有人知道更好的方法来实现这一点,请告诉我。

最佳答案

这两个查询不相同 - 这是:

and o.Date between '07/26/2009' and '07/26/2010'

...相当于:

and o.Date >= '07/26/2009' 
and o.Date <= '07/26/2010'

BETWEEN 是 ANSI 标准,包含我遇到过的每个数据库。

请注意,如果您没有为 DATETIME 指定时间部分,则该值默认从当天的午夜 - 00:00:00 开始。

关于SQL 日期比较仅使用日期而不是时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345500/

相关文章:

sql - MEAN-Stack - 无法从服务器读取第二个 SQL 表

MySQL 触发器语法

mysql - 错误 1214 (HY000) : The used table type doesn't support FULLTEXT indexes

php - 使用 PHP PDO 对象连接 MSSQL 数据库

python - 尚不支持 ODBC SQL 类型 -155

c# - SqlDependency 查询通知错误

mysql - 计算别名

SQL 2008 - 结果集顺序问题

.net - System.Data.SqlClient.SqlCommand 对象可以执行的 T-SQL 有哪些限制?

sql - 如何插入到为每一列指定默认值的表中?