sql-server - 包含在(@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
子句不是。我对吗?
解决方案
在本文中,@Ameena Lalani解释并演示了搜索时态表的各种选项,解释得非常好,请确保您阅读了整篇文章。
简单总结一下:
FROM <start_datetime> TO <end_datetime>
返回结合时间和历史表的结果,不包括结束时间的上边界。BETWEEN <start_datetime> AND <end_datetime>
返回时间表和历史表的组合结果,包括结束时间的上限。CONTAINED IN (start_datetime, end_datetime)
仅从历史表返回结果,并包括时间的上限和下限。
这是从那篇文章中截取的屏幕截图:
推荐阅读
- java - Fluentwait 与 Selenium 3.10
- typescript - Angular 6中子方法的停止(返回)代码
- java - 在 Spring Boot 2.1.1 中覆盖默认的 RestTemplate
- indexing - Sitecore > 搜索索引未针对新站点节点更新
- c++ - arm-none-eabi-gcc 在 C 中使用 C++ 代码:未定义的引用
- python - 使用 re.sub() 遍历列表
- fabric - 如果命令未完成或未成功,我如何在 Fabric 中继续?
- sql - 在一张表中获取多个sql结果
- python - functools 没有属性 lru_cache
- php - Laravel:从 html 表中获取复选框值