将 1 年的数据保存在 table

Keep 1 year data in a table

我有一个名为 Inc_Hist 的 table,它包含过去 3 年的数据,我只想保留 1 年的数据并将剩余数据移至另一个 table Inc_Archive.

Table Inc_hist

的结构
Inc_Num  Modified_Date
Inc01    3/4/2014
Inc02    11/2/2013
Inc03    2/1/2015
Inc04    6/3/2013
Inc05    5/3/2014

输出应该是:

Inc_hist

Inc_Num  Modified_date
Inc01    3/4/2014
Inc03    2/1/2015
Inc05    5/3/2015

Inc_Archive

Inc_Num   Modified_date
Inc02     11/2/2013
Inc04     6/3/2013

您不能一步完成,但您可以先将数据插入存档 table,然后将其从历史记录中删除 table:

INSERT INTO Inc_Archive(Inc_Num, Modified_Date)
SELECT Inc_Num, Modified_Date FROM Inc_Hist 
WHERE Modified_Date < @dateFrom    -- Define the date

DELETE FROM Inc_Hist 
WHERE Modified_Date < @dateFrom    -- Define the date

如果您想明确删除从当前日期起超过 1 年的记录,您可以使用函数 DATEADDGETDATE。将 WHERE 条件更改为以下代码:

WHERE Modified_Date < DATEADD(YEAR, -1, GETDATE())

您可以通过DATEPART函数过滤掉年份数据。这个给你准确的结果。

 DECLARE @Inc_Hist TABLE(Inc_Num varchar(10), Modified_Date date)
DECLARE @Inc_Archive TABLE(Inc_Num varchar(10), Modified_Date date)

insert into @Inc_Hist (Inc_Num, Modified_Date)
Values 
('Inc01', '3/4/2014'),
('Inc02', '11/2/2013'),
('Inc03', '2/1/2015'),
('Inc04', '6/3/2013'),
('Inc05', '5/3/2014')

INSERT INTO @Inc_Archive (Inc_Num, Modified_Date)
select Inc_Num, Modified_Date from @Inc_Hist 
WHERE DATEPART(Y,Modified_Date) > DATEPART(Y,GETDATE())

DELETE @Inc_Hist
WHERE DATEPART(Y,Modified_Date) > DATEPART(Y,GETDATE())

SELECT Inc_Num, Modified_Date FROM @Inc_Hist
SELECT Inc_Num, Modified_Date FROM @Inc_Archive

希望对您有所帮助。