Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Первое/второе/любое воскресенье месяца  [new]
RegisteredUser
Member

Откуда:
Сообщений: 576
Коллеги!
Погуглил, но что-то не нашел.

Нужно в скрипте определять пока первое воскресенье месяца
(но лучше сразу что-то универсальное: любой N-ый день недели).
Как?
26 окт 17, 10:40    [20901168]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Я вроде вот тут писал: https://www.sql.ru/faq/faq_topic.aspx?fid=998
26 окт 17, 10:43    [20901180]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
rnk
Member

Откуда:
Сообщений: 126
iap
Я вроде вот тут писал: https://www.sql.ru/faq/faq_topic.aspx?fid=998

Кстати, последний день месяца так будет быстрее:
return DATEADD(d,-1,DATEADD(m,1,DATEADD(d,1-DAY(@date),@date)))
26 окт 17, 11:03    [20901269]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
rnk,

есть уже EOMONTH
26 окт 17, 11:05    [20901274]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
RegisteredUser
Member

Откуда:
Сообщений: 576
Спасибо!
26 окт 17, 11:07    [20901280]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
rnk
так будет быстрее
Намного?
26 окт 17, 12:25    [20901652]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Сделать табличку календарь.
Сделать нужные поля. Зачитывать оттуда простыми запросами.
26 окт 17, 13:46    [20902081]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
rnk
Member

Откуда:
Сообщений: 126
iap
rnk
так будет быстрее
Намного?

По моим тестам, раза в полтора (на 100М записей 58 секунд против 84). Нет преобразований типов и строковых операций, чистая арифметика, отсюда и выигрыш.

Впрочем, как уже любезно напомнил TaPaK, начиная с MSSQL 2012 есть функция EOMOTH, отработавшая на том же массиве за 52 секунды. Если честно, я думал, будет быстрее.
26 окт 17, 14:21    [20902282]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
TaPaK
rnk,
есть уже EOMONTH

вообще не понимаю этой функции. для чего она нужна?

если нужно посмотреть все данные в месяце, то это
@date >= BOMONTH AND @date < BOMONTH
особенно, если @date совсем не DATE, а DATETIME... но EOMONTH есть, а BOMONTH нет!
26 окт 17, 14:29    [20902340]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Руслан Дамирович
...

Точнее, @date >= BOMONTH( @date, 0 ) AND @date < BOMONTH( @date, 1 )
26 окт 17, 14:31    [20902353]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
rnk
Member

Откуда:
Сообщений: 126
Руслан Дамирович
TaPaK
rnk,
есть уже EOMONTH

вообще не понимаю этой функции. для чего она нужна?

Мне как-то понадобилась (правда, сам написал). Пусть будет, пить-есть не просит.

Больше функций, хороших и разных!
26 окт 17, 14:40    [20902414]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Руслан Дамирович,

@date > EOMONTH( @date, -1 ) AND @date <= BOMONTH( @date, 0 )
26 окт 17, 14:44    [20902438]     Ответить | Цитировать Сообщить модератору
 Re: Первое/второе/любое воскресенье месяца  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
на практике я точно нигде не написал её :) но если нужен перый/последний день месяца то запись короче
26 окт 17, 14:47    [20902454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить