2013-06-17 3 views
1

Я хочу один месяц от 2-15-13 до 2-28-13, но Dateadd (mm, -1, '2-28-13') будет return 1-15-13 to 1-28-13, я хочу, чтобы он заканчивался в конце месяца, т. е. 1-31-13. Любая помощь приветствуется.Как рассчитать финансовый месяц с середины месяца

(редактирование/обновление)

Я хотел бы сделать его более ясным:

declare @Lastmonth_StartDate datetime, 
     @Lastmonth_EndDate datetime, 
     @StartDate datetime = '2/15/13', 
     @EndDate datetime = '2/28/13' 

set @Lastmonth_EndDate=DATEADD(m,-1,@EndDate) 
set @Lastmonth_StartDate =DATEADD(m,-1,@StartDate) 
select @Lastmonth_StartDate, @Lastmonth_EndDate 

Вместо 28 января, я хотел бы джан 31 для Lastmonth_EndDate, и если даты начала являются 2/1/13 - 2/15/13 Я хотел бы, чтобы Lastmonth_EndDate был 15-м числа предыдущего месяца.

- Редактирование 6/18

Я пытаюсь использовать IF или СЛУЧАЙ, чтобы сделать работу, но я не так хорошо, любой свинца, пожалуйста?

+0

Связанные: http://stackoverflow.com/questions/6111892/sql-how-to-determine-if-date-month-date-contains-29-30-or-31?rq=1 – Paulpro

+0

Какие СУБД вы используете ? –

+0

Используя 2008R2, спасибо. – theeasyone

ответ

0

Чтобы получить конец года, добавьте месяц к первому из этого года-месяца, а затем вычтите 1 день. Остальное - детали.

+0

Если я это сделаю, мой результат не так, как ожидается, если даты начала, например, 2-1-13 до 2-15-13. Благодарю. – theeasyone

+0

Если 2-1-13 - 2 января, то вы не добавили месяц месяц первого месяца, вы добавили его во 2-й. –

+0

Нет Дэн, его первая половина. То, что я хочу, не так точно в предыдущем месяце: если я прохожу 2-1-13 до 2-15-13, я хочу от 1-1-13 до 1-15-13, и если я пройду 2-15-13 до 2 -28-13 Я хочу 1-15-13 до 1-31-13. посмотрите, можете ли вы помочь. Благодарю. – theeasyone

0

Для синтаксиса вы используете я полагаю, вы используете SQL Server для SQL Server можно сделать следующим образом:

Начало периода:

Convert(datetime, Convert(varchar(7),DateAdd(m, 0, '2-15-13'),121) + '-01 00:00:00.000', 121) 

Конец периода:

DateAdd(d, -1, Convert(datetime, Convert(varchar(7),DateAdd(m, 1, '2-28-13'),121) + '-01 23:59:59.997', 121))) 
Смежные вопросы