2016-01-29 34 views
0

我的表格有一个列date_period,其格式为YYYYMM。我想写一个查询,在date_period列中插入日期,格式为YYYYMM如果当前月份没有条目。我如何从表格中存储的两个日期中获得月份差异,格式为YYYYMM

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

我该如何做到这一点?

+1

它们转换成日期使用Convert();然后按月执行DateDiff。 –

+0

@munmun什么是你采取的数据类型date_period列? – Meer

+0

@MeerDeen其** int **数据类型 –

回答

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,[email protected],@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 [email protected] 
     end 
+0

我已经这样做了,就好像当前月份日期不存在那么它会将该日期添加到date_period列。但我的问题是如何检测到当前月份有多少月没有插入。在上面的例子中,我只插入日期到十月份,现在我想插入剩余的月份日期,直到当前月份。 –

+0

非常感谢!它工作得很好:) –

+0

你能解释一下这行: declare @Lastsaveddate varchar(20)= @lastsavedMonth +''+ RIGHT(CONVERT(VARCHAR,100 + DATEPART(d,@ v)),2) –

相关问题