1. 背景
在測試FlinkSQL時,遇到FOR SYSTEM_TIME AS OF
語法,研究下。
FOR SYSTEM_TIME AS OF otime
指的是在otime時間點有效的數據。
2. 實踐過程
時態數據庫測試選擇了SQL-server2017
-- 創建 時態表
-- DBO是每個數據庫的默認用戶,具有所有者權限,即DbOwner
create table dbo.Emp (
[eno] integer not null primary key,
[Sys_start] datetime2(2) generated always as row start,
[Sys_end] datetime2(2) generated always as row end,
[ename] varchar(50),
period FOR SYSTEM_TIME (Sys_start, Sys_end)
) with (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmpHistory) );
select * from dbo.Emp ;
-- 2022-01-24 05:58:13.71 插入一條數據
insert into dbo.Emp values('1', DEFAULT , DEFAULT , 'ALIAS') ;
-- 2022-01-24 05:59:12.66 更新值
UPDATE dbo.Emp SET ENAME = 'BOB' ;
-- 查詢2022-01-24 05:59:11.66時刻的表數據
select * from dbo.Emp
FOR SYSTEM_TIME AS OF '2022-01-24 05:59:11.66' ;
-- 2022-01-24 06:01:43.88
UPDATE dbo.Emp SET ENAME = 'CANDY' ;
-- 查詢2022-01-24 05:59:59.66時刻的表數據
select * from dbo.Emp
FOR SYSTEM_TIME AS OF '2022-01-24 05:59:59.66' ;
-- 查詢當前時間的表數據
select * from dbo.Emp ;
3. 引用
TDSQL-時態數據庫
SQL-server2017安裝
sql server語法(基礎整理)
SqlServer中的dbo是什么意思
4. 拓展
Oracle中查看指定時間的表快照
# 注意oracle只保留近5天的快照
select * from xxx.test_table as of timestamp to_date('2022-01-21 11:19','yyyy-mm-dd hh24:mi');