我的表格有一个列date_period,其格式为YYYYMM。我想写一个查询,在date_period列中插入日期,格式为YYYYMM如果当前月份没有条目。我如何从表格中存储的两个日期中获得月份差异,格式为YYYYMM
例如:日期有效期至2015年10月,因此它将包含值。现在我想检查并插入数据直到当前月份,如果它不存在。所以参赛作品现在是201511,201512,201601
我该如何做到这一点?
我的表格有一个列date_period,其格式为YYYYMM。我想写一个查询,在date_period列中插入日期,格式为YYYYMM如果当前月份没有条目。我如何从表格中存储的两个日期中获得月份差异,格式为YYYYMM
例如:日期有效期至2015年10月,因此它将包含值。现在我想检查并插入数据直到当前月份,如果它不存在。所以参赛作品现在是201511,201512,201601
我该如何做到这一点?
尝试这种方式,可能它会帮助你
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
我已经这样做了,就好像当前月份日期不存在那么它会将该日期添加到date_period列。但我的问题是如何检测到当前月份有多少月没有插入。在上面的例子中,我只插入日期到十月份,现在我想插入剩余的月份日期,直到当前月份。 –
非常感谢!它工作得很好:) –
你能解释一下这行: declare @Lastsaveddate varchar(20)= @lastsavedMonth +''+ RIGHT(CONVERT(VARCHAR,100 + DATEPART(d,@ v)),2) –
它们转换成日期使用Convert();然后按月执行DateDiff。 –
@munmun什么是你采取的数据类型date_period列? – Meer
@MeerDeen其** int **数据类型 –