Sql 选择年份(getdate()-2)和月份作为12

Sql 选择年份(getdate()-2)和月份作为12,sql,sql-server,Sql,Sql Server,我的源表列是ReportingPeriod Nvarchar(6) 数据删除查询必须在2年前完成 此查询不起作用 delete from table where ReportingPeriod < year(getdate() -2) and month as 12 从表中删除,其中报告期

我的源表列是
ReportingPeriod Nvarchar(6)
数据删除查询必须在2年前完成

此查询不起作用

delete from table where ReportingPeriod  < year(getdate() -2) and month as 12
从表中删除,其中报告期<年(getdate()-2),月为12
我需要得到201212作为结果

标准为当前年份-2,月份为12

2014年的预期结果是201212
2015年的预期结果是201312

您可以尝试以下方法

SELECT FROM <YOUR_TABLE>
WHERE ReportingPeriod < Convert(nvarchar(4), year(getdate()) - 2) + '12'
从中选择
其中ReportingPeriod
我会先做所有的日期数学运算,将事情保持为
datetime
,然后在最后转换为
nvarchar
。如果没有提供足够的空间,
CONVERT
会很方便地截断结果,因此我们只提供年份和月份的空间,就可以得到我们想要的:

select CONVERT(nvarchar(6),
      DATEADD(year,DATEDIFF(year,'20010101',CURRENT_TIMESTAMP)
                                ,'19991201')
   ,112)
结果:

201212
这是因为我们利用了两个任意日期之间的关系——例如,对于2001年的任何日期,我们想要的结果都是1999年12月的日期——所以这就是我使用的



诚然,对于这个需求,上面的内容看起来可能过于复杂,但是,通过适当选择要使用的期间和两个任意日期以及它们之间的关系,可以使许多问题与
DATEADD
/
DATEDIFF
模式相匹配。

您可以将
ReportingPeriod
转换为一个日期,因此,
201212
将成为
2012-12-01
,因为我假设您不关心月份的哪一天

cast(left(ReportingPeriod,4) + '-' 
    + RIGHT(ReportingPeriod, 2) + '-01' as datetime)
然后从
GETDATE()
中获取当前年份-2,并附加月
12
和日
31
来比较这些值,这将返回
2012-12-31

cast(cast(
     cast(year(getdate()) -2 as nvarchar(4))
     + '-12-31' as nvarchar(10)) as datetime)
因此,根据设置为
12
的月份,结合这些,您应该能够选择所有超过2年的记录

select cast(left(ReportingPeriod,4) + '-' 
       + RIGHT(ReportingPeriod, 2) + '-01' as datetime) ReportPeriodDate
from [YourTable]
where cast(left(ReportingPeriod,4) + '-' 
      + RIGHT(ReportingPeriod, 2) + '-01' as datetime) 
      <= cast(cast(
              cast(year(getdate()) -2 as nvarchar(4)) 
+ '-12-31' as nvarchar(10)) as datetime)
选择cast(左(ReportingPeriod,4)+'-'
+右(ReportingPeriod,2)+'-01'作为日期时间)ReportPeriod日期
从[你的桌子]
其中铸造(左(报告期,4)+'-'
+右(报告期间,2)+'-01'作为日期时间)

使用您的格式将ReportingPeriod Clunn转换为datetime,然后继续您的工作
delete [YourTable]
where cast(left(ReportingPeriod,4) + '-' 
      + RIGHT(ReportingPeriod, 2) + '-01' as datetime) 
      <= cast(cast(
              cast(year(getdate()) -2 as nvarchar(4)) 
              + '-12-31' as nvarchar(10)) as datetime)