【问题标题】:Difference comparison operator in MSSQL [duplicate]MSSQL中的差异比较运算符[重复]
【发布时间】:2018-11-30 16:25:54
【问题描述】:
select * from table_Sample
where ID = 9229 
and Datetime between '2018-06-18T18:30:00.00'
AND '2018-06-19T18:29:59.59'

第二个选项:

select * from table_Sample
where ID = 9229 
and Datetime >= '2018-06-18T18:30:00.00'
AND Datetime <= '2018-06-19T18:29:59.59'

您能否解释一下两个查询在性能或结果集或其他方面有什么区别?

【问题讨论】:

  • 你都试过了吗?
  • 是的,我得到了相同的结果集
  • 如果你在你的服务器上试一试,你也许会有答案
  • 所以没有性能差异吧?
  • 我更喜欢&gt;= dt1 AND &lt;= dt2,因为您可以直接看到它的含义以及它的包容性,而BETWEEN 隐藏了这个事实。您也可以轻松地将其更改为(例如)&gt;= somedate AND &lt; someotherWhat do BETWEEN and the devil have in common?

标签: sql-server


【解决方案1】:

比较执行计划。您会发现这些计划是相同的,因为BETWEEN 被转换为与第二个查询相同的&gt;= AND &lt;= 谓词,产生相同的结果和性能。

从功能的角度来看,还要考虑到特定日期范围的日期范围查询通常不希望考虑分辨率更高的时间类型的时间分量。在这种情况下,最好指定包含开始日期和不包含结束日期。无论数据类型精度如何,这将避免无意中丢失带有小数秒的行。

SELECT * 
FROM dbo.table_Sample
WHERE ID = 9229 
    AND Datetime >= '2018-06-18T18:30:00.00'
    AND Datetime < '2018-06-20T00:00:00.00';

【讨论】:

  • 哦,好吧...所以为了获得更好的性能,如果出现这种情况,我应该写第二个选项...?
  • I 表示结果集的效率。 #Rafalon
  • @cSharma,相同的计划提供相同的性能和结果。
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多