如何从两个日期获得月份差异,这两个日期以YYYYMM格式存储在表格中

时间:2016-01-29 07:40:33

标签: sql-server-2008 asp.net-mvc-4

我的表格有一个date_period列,以 YYYYMM 格式存储日期。我想编写一个查询,如果在当前月份之前没有条目,则以 YYYYMM 格式在date_period列中插入日期。

例如:日期有进入2015年10月,因此它将包含值 201510 。现在我想检查并插入数据直到当前月份(如果不存在)。因此,参赛作品现在将 201511,201512,201601

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

  

尝试这种方式,可能会帮助你

DECLARE @v DATE= getdate()
declare @Currentdate varchar(10)
set  @Currentdate=CONVERT(VARCHAR(10), @v, 112)
/*@Currentdate string is in format '20160129'*/
IF NOT EXISTS(select * from Table1 where  date_period=LEFT(@Currentdate,6))
begin
 insert into Table1(date_period)values(LEFT(@Currentdate,6))
end

试试这个

我认为这将是您问题的完整解决方案

declare @monthcount int
DECLARE @v DATE= getdate()
declare @lastsavedMonth varchar(20)= (select MAX(date_period) from Table1)
declare @Lastsaveddate varchar(20)= @lastsavedMonth+''+RIGHT(CONVERT(VARCHAR, 100 + DATEPART(d,@v)), 2)

set @monthcount=datediff(month,@Lastsaveddate,CONVERT(VARCHAR(10), @v, 112))

while @monthcount>=0
        begin
                declare @dateofsavingmonth varchar(20)
                if(@monthcount=0)
                    begin
                    set @dateofsavingmonth=CONVERT(VARCHAR(10),@v,112)
                    end
                else
                   begin
                     set @dateofsavingmonth=CONVERT(VARCHAR(10), dateadd(month,-@monthcount,@v),112)
                   end

                    IF NOT EXISTS(select * from Table1 where  date_period=LEFT(@dateofsavingmonth,6))
                    begin
                     insert into Table1(date_period)values(LEFT(@dateofsavingmonth,6))
                    end
                set @monthcount =@monthcount-1
        end