2013-12-03 3 views
1

Обратный вопрос - Как определить, соответствует ли дата на прошлой неделе месяца?Как получить дату X-дневной недели за любой месяц с предоставленной даты или из GetDate() за текущий месяц

Например, используя GetDate(), как я узнаю, что сегодняшняя дата или дата указаны на прошлой неделе месяца. Число недель в MSSQL может быть 4 или 5.

Предположим, я хочу получить дату последней субботы каждого месяца. Но на SQL-неделе № 5 (которая на прошлой неделе декабря 2013 года) на декабрь 2013 года не было пятницы. Последняя неделя декабря заканчивается на Tue 31-го. Итак, мне нужно пропустить Дек и пойти дальше на январь 2014 года, но также на прошлой неделе заканчивается в пятницу 31-го. Итак, продолжайте перемещаться.

Итак, как получить дату X-х прошедшей недели с данной даты или сегодняшней даты?

Спасибо.

+0

Итак, вы хотите получить 27 декабря в последнюю пятницу декабря 2013 года? – Raj

+0

Я не считаю, что ваше повествование очень ясное - можете ли вы привести некоторые примерные даты ввода и дату, которую решение должно вычислить из этих примеров ввода? –

+0

@Raj NO. В этом случае мне нужно игнорировать Dec и Jan до апрельских месяцев, так как их последняя неделя не имеет субботы. Так что, прямо дойдем до мая, так как на прошлой неделе майская суббота. – sapatelbaps

ответ

1

Вы можете использовать приведенный ниже код. Он основан на неделе, начинающейся в понедельник и заканчивающейся в воскресенье:

declare @date as date = '20131230' -- this is the date you check 

declare @lastdayofmonth as date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0)) 
declare @lastweekstart as date = dateadd(d, -datepart(dw, @lastdayofmonth)+2, @lastdayofmonth) 
if datepart(m, @lastdayofmonth) <> datepart(m, @lastweekstart) 
    set @lastweekstart = dateadd(d, -7, @lastweekstart) 

if @date >= @lastweekstart and @date <= @lastdayofmonth 
    print 'Within last week' 
else 
    print 'Not within last week' 
Смежные вопросы