sql - 2 个 "same"WHERE 语句返回不同的记录数

标签 sql sql-server-2008 tsql

T-SQL 用户 SSMS 2008

我正在运行两个(应该是)有效的相同查询,它们从一个表(比如,表 A)中提取记录,使用 WHERE 语句来定义记录的日期参数被退回。问题是,这 2 个查询返回的计数不同。谁能帮我理解为什么?如您所见,我正试图从根本上拉动 9 月的记录。这是查询...

    /*Returns 26,310 records*/
    select A.*
    from A
    where A.Date between '9/1/2015' and '9/30/2015'

    /*Returns 27,925 records*/
    select A.*
    from A
    where YEAR(A.Date)*100 + MONTH(A.Date) = 201509

最佳答案

如果您正在处理日期时间数据(与没有时间成分的纯日期相反),我建议您放弃使用 独占 端点:

select A.*
from A
where A.Date >='20150901' and A.Date < '20151001'

独占端点往往更容易计算并且您不必担心时间组件的精度。

您的第一个查询的问题是 '9/30/2015''9/30/2015 00:00:00' 相同 - 所以,例如,'9/30/2015 00:00:01'(以及任何更晚的时间)的 Date 值大于该值。有些人试图计算一天的最后时刻(如 23:59:59 或 23:59:59.997),但您必须精确计算,否则您会错过值。因此我上面关于精度的评论。

关于sql - 2 个 "same"WHERE 语句返回不同的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373949/

相关文章:

java - 将嵌套 sql 查询转换为 jpa/hibernate

asp.net - 如何让 ELMAH 与 SQL Server 一起工作(权限问题)

没有指定列的 SQL Server 插入

SQL Server 2008 执行计划问题

MySQL 将 STRING 排序为 INT 并插入

sql-server-2008 - SQL 服务器 2008 : Rename an element using XML DML?

asp.net - 托管 ASP.NET 应用程序的硬盘空间对网站的性能有影响吗?

sql - 行为不当的身份

sql - 这个 T-SQL 语句有什么问题?

sql - PostgreSQL 查询只显示一个用户条目