包含在(@start,@end)VS BETWEEN之间-时态表

时间:2018-08-27 11:28:20

标签: sql-server sql-server-2016 temporal-tables

临时表SQL Server 2016及更高版本中的一项新功能,就像SQL Server自动将数据历史记录保留在表中的一种有趣方式一样。 SQL Server 2016中引入了一些新的T-SQL语法来支持临时表。我遇到了其中一些误会。

official documentation中,BETWEEN <start_date_time> AND <end_date_time>的描述如下:

  

与上述在FOR SYSTEM_TIME FROM中相同     描述,除了返回的行表   包括在由定义的上边界上变为活动的行    端点。

CONTAINED IN (<start_date_time>, <end_date_time>)的描述如下:-

  

返回一个表,其中包含已打开的所有行版本的值   并在两个datetime定义的指定时间范围内关闭   CONTAINED IN参数的值。精确变为活动状态的行   在下边界或完全停止在上边界活动   边界。

所以我了解到,CONTAINED IN (@start,@end)BETWEEN子句之间的唯一区别是CONTAINED IN (@start, @end)包括@start边界,而BETWEEN子句没有。我说的对吗?

1 个答案:

答案 0 :(得分:2)

this文章中,@Ameena Lalani解释并演示了搜索时态表的各种选项,并很好地解释了这些,确保您阅读了整篇文章。

简要总结一下:

  • FROM <start_datetime> TO <end_datetime>
    返回组合时间和历史表的结果,不包括结束时间的上限。
  • BETWEEN <start_datetime> AND <end_datetime>
    从时间和历史记录表中返回组合的结果,包括结束时间的上限。
  • CONTAINED IN (start_datetime, end_datetime)
    仅从历史记录表返回结果,并且包括时间的上限和下限。

这是该文章的屏幕截图: