2014-12-16 3 views
0

я покажу вам, моя логика получает ошибку только тогда, когда месяц декабряполучить последнюю дату в TSQL

declare @startDate datetime  
declare @endDate datetime 

set @startDate = convert(varchar(2),@month)+'/1/'+ convert(varchar(4),@year)  

set @endDate = dateadd(DD,-1,(convert(varchar(2),@month+1)+'/1/'+convert(varchar(4),@year))) 

while(@startDate < @endDate+1)  
begin  
    insert into @tempday  
    select @startDate  
    set @startDate = dateadd(day, 1, @startDate)  
end  

пожалуйста, помогите

+0

Почему это под названием «PLSQL», но помечено SQL-Server-2008? –

ответ

0

В случае декабря @month+1 получит Вас 13, который не является допустимым номер месяца

+0

так что shoud i do bro –

+0

У меня хранимая процедура работает отлично со всем месяцем, но в декабре я получаю эту ошибку –

+0

, если вы хотите пойти с кодом, то iif (@ month = 12, 1, @ month + 1) –

1

После того как вы @startdate, использование:

set @enddate = dateadd(day,-1,dateadd(month,1,@startdate)) 

И я не думаю, что вы имеете в виду plsql ...

Есть и другие вещи, о которых вы могли бы подумать, например, не использовать цикл while. Почему бы не запрашивать таблицу, которая имеет множество строк (например, как sys.all_columns) и использование:

insert @tempday 
select top (datediff(day,@startdate,@enddate)+1) 
    dateadd(day,row_number() over (order by (select 1))-1,@startdate) 
from sys.all_columns; 
Смежные вопросы