将1年数据保存在表格中

时间:2015-03-04 20:32:52

标签: sql-server sql-server-2008 tsql sql-server-2012

我有一个名为Inc_Hist的表,它包含过去3年的数据,我希望只保留1年的数据,并将剩余的数据移到另一个表Inc_Archive中。

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

2 个答案:

答案 0 :(得分:1)

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

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())

答案 1 :(得分:1)

您可以按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

希望这有帮助。