首页 > 解决方案 > 包含在(@start,@end)VS BETWEEN - 临时表中

问题描述

Temporal Tables是 Temporal Tables 及更高版本中的一个新功能SQL Server 2016,它就像一种有趣的方式SQL Server来自动保存表中的数据历史记录,但是引入了一些新的 T-SQL 语法SQL Server 2016来支持 Temporal Tables。我对他们中的一些人有误解。

来自官方文档的描述BETWEEN <start_date_time> AND <end_date_time>如下:

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

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

返回一个表,其中包含在 CONTAINED IN 参数的两个日期时间值定义的指定时间范围内打开和关闭的所有行版本的值。包括恰好在下边界上变为活动或在上边界上停止活动的行。

CONTAINED IN (@start,@end)所以我明白, andBETWEEN子句之间的唯一不同CONTAINED IN (@start, @end)是包含@start 边界,而BETWEEN子句不是。我对吗?

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

解决方案


本文中,@Ameena Lalani解释并演示了搜索时态表的各种选项,解释得非常好,请确保您阅读了整篇文章。

简单总结一下:

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

这是从那篇文章中截取的屏幕截图:


推荐阅读