我有一个名为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
答案 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年的记录,可以使用DATEADD
和GETDATE
功能。将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
希望这有帮助。