SQL. ИП или функция должны рассчитать следующую дату в пятницу - PullRequest
8 голосов
/ 13 мая 2011

Мне нужно написать процедуру магазина, которая будет возвращать следующую дату пятницы на определенную дату? например - если дата 05/12/2011, то следующая пятница будет возвращаться как 13.05.2011. Если вы сдадите, 16.05.2011, то он должен вернуть дату 20.05.2011 (пятница). Если вы передаете пятницу в качестве даты, она должна вернуть ту же дату.

Ответы [ 3 ]

9 голосов
/ 13 мая 2011

Я бы сделал этот скалярный UDF, так как легче использовать вывод.

CREATE FUNCTION dbo.GetNextFriday(
@D DATETIME
)
RETURNS DATETIME 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN DATEADD(DAY,(13 - (@@DATEFIRST + DATEPART(WEEKDAY,@D)))%7,@D)
END
4 голосов
/ 13 мая 2011

Это для SQL Server 2008. Чтобы использовать в 2005 году, просто измените поля даты на ваши предпочтения для преобразования даты в время.Также предполагается, что вы не меняете начальное значение недели по умолчанию.

DECLARE @PassedDate date = '5/21/2011';
SELECT DATEADD(DAY,(CASE DATEPART(DW,@PassedDate) WHEN 7 THEN 6 ELSE 6 - DATEPART(DW,@PassedDate) END),@PassedDate);
0 голосов
/ 13 мая 2011

Здесь отличные решения, но я также рекомендую смотреть на временные таблицы: вы можете легко сгенерировать их на сервере Analysis, и они могут быть очень быстро проиндексированы, предоставляя вам множество простых способов получить дни следующей недели (среди прочего).

Вы можете узнать о них больше здесь

В нашем случае, то же самое решение будет

Select MIN(PK_Date) from Time Where PK_Date > @SomeDate AND Day_Of_Week= 6

И, конечно, когдаВы делаете это для большого набора записей, вы также можете делать соединения для максимальной скорости и эффективности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...