我想在我的数据库中只保留3个财务年度表,我需要删除表
意味着我有一张类似
的表格KT201705, KT201502 , KT201412 , KT201605 , KT201709 , KT201506
本财政年度为2017-2018 上一财政年度2016-2017 2015-2016财年的最后一个财政年度
我想保留像
这样的表格KT201705,
KT201605,
KT201709,
KT201506
我想删除在财政年度之前创建的所有表格,这意味着像
这样的表格KT201412,
KT201502
我尝试了什么:
select 'DROP TABLE ' + NAME from sys.tables
WHERE NAME LIKE 'KT2%'
但我无法弄清楚财政年度的部分。
我还检查了这个查询:
SELECT CASE WHEN DatePart(Month, convert(varchar(10),GETDATE(),112)) >= 4
THEN DatePart(Year, convert(varchar(10),GETDATE(),112)) + 1
ELSE DatePart(Year,convert(varchar(10),GETDATE(),112))
END AS Fiscal_Year
但它只给出了当前的财政年度。
任何人都可以知道如何继续前进吗?
答案 0 :(得分:0)
这会有效吗
;WITH cteNum
AS(
SELECT N = ROW_NUMBER()OVER(ORDER BY (SELECT NULL))
FROM master.dbo.spt_values V
)
SELECT 'DROP TABLE ' + NAME
FROM sys.tables
CROSS APPLY cteNum N
WHERE NAME LIKE 'KT'+ CONVERT(NVARCHAR(4),DATEADD(YEAR, -N.N, GETDATE()), 102) + '%'
AND N.N >= 2 AND N.N <=10
略微修改的相同查询返回此日期列表
;WITH cteNum
AS(
SELECT N = ROW_NUMBER()OVER(ORDER BY (SELECT NULL))
FROM master.dbo.spt_values V
)
SELECT yyyyDate = CONVERT(NVARCHAR(4),DATEADD(YEAR, -N.N, GETDATE()), 102)
FROM cteNum N
WHERE N.N >= 2 AND N.N <=10