как мне получить первую субботу февраля года? - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно получить записи, отфильтровав столбец данных со «первой субботы февраля года» до «1 февраля следующего года»

Мой запрос будет выглядеть примерно так:

ВЫБРАТЬ * ИЗ СОТРУДНИКА, ГДЕ НУЖДАЙТЕСЬ МЕЖДУ «первой субботой февраля года» и «1 февраля следующего года»

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вот один из способов, предполагая, что datefirst равно 7, и что у вас есть datefromparts() доступно:

set datefirst 7
declare @dt1 date = datefromparts(year(current_timestamp), 2, 1);
set @dt1 = dateadd(day, 7 - datepart(weekday, @dt1), @dt1);

declare @dt2 date = datefromparts(year(current_timestamp) + 1, 2, 1);
set @dt2 = dateadd(day, 7 - datepart(weekday, @dt2), @dt2);

Если вам нужно выполнить встроенный расчет, просто разверните его по подстановке:

between
dateadd(day, 7 - datepart(weekday, datefromparts(year(current_timestamp), 2, 1)), datefromparts(year(current_timestamp), 2, 1))
and
dateadd(day, 7 - datepart(weekday, datefromparts(year(current_timestamp) + 1, 2, 1)), datefromparts(year(current_timestamp) + 1, 2, 1))
0 голосов
/ 27 июня 2018

Если у вас нет таблицы «Календарь» или «Счет», возможно, что-то вроде этого.

* ** 1003 тысяча два * Пример
Declare @Date1 date = '2018-02-01'
Declare @Date2 date = '2019-02-01'

Select E.*
 From  Employee E
 Join (
        Select DateR1=min(case when DateName(WEEKDAY,D)='Saturday' then D end)
              ,DateR2=max(D)
         From (Select Top (DateDiff(DAY,@Date1,@Date2)+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),@Date1) 
                From  master..spt_values n1,master..spt_values n2
              ) A
       ) D on E.HierDate between D.DateR1 and D.DateR2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...