|
Функция определения месяца (с макс. кол. дней) из диапозона дат
|
|||
---|---|---|---|
#18+
Как лучше всего реализровать функцию, которая принимает на вход две даты и возвращает месяц и год периода для того месяца, который содержит наибольшее количество дней в промежутке указанных дат? Например, Код: sql 1.
Ограничения функции: Код: sql 1. 2.
Первое, что приходит на ум - цикл со счетчиками, но может быть есть более красивое решение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 23:29 |
|
Функция определения месяца (с макс. кол. дней) из диапозона дат
|
|||
---|---|---|---|
#18+
опечатка, должно быть: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 23:41 |
|
Функция определения месяца (с макс. кол. дней) из диапозона дат
|
|||
---|---|---|---|
#18+
У меня получилось, что то типо этого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
Может кому пригодится. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 02:32 |
|
Функция определения месяца (с макс. кол. дней) из диапозона дат
|
|||
---|---|---|---|
#18+
Правильно ли я понял постановку задачи 1. Есть диапазон дат: от 02.12.2018 до 05.01.2019 2. Внутри этого диапазона - на первый месяц диапазона (декабрь 2018) приходится (31.12.2018-02.12.2018) + 1 = 30 дней - на второй месяц диапазона (январь 2019) приходится (05.01.2019-01.01.2019) + 1 = 5 дней Поскольку 30 больше 5, то надо вернуть "декабрь 2018" В случае равенства не очень понятно, что вернуть. Но, предположим, первую дату ------------- Если даты диапазона всегда в разных и соседних месяцах, то можно просто подсчитать количество дней диапазона и сравнить с номером дня второго диапазона Т.е. в данном случае, разница (05.01.2019 - 02.12.2018) + 1 = 35 дней Номер дня завершающей даны = 5 дней 35/2 >= 5 Значит, в первой "половине" дней больше и надо вернуть месяц и год первой даты В виде кода это так Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 12:24 |
|
Функция определения месяца (с макс. кол. дней) из диапозона дат
|
|||
---|---|---|---|
#18+
ВладимирМ, да все правильно поняли. Суть задачи в целом в следующем: 1). Пользователь при формировании отчета выбирает диапозон дат " с _ по _" 2). Далее описанная функция вытягивает из диапозона год и месяц (для того месяца, в котором больше всего дней) 3). Полученные данные вставляются в отчет: "Отчет такой то за [месяц] [год]" Отчет месячный, но часто бывает сдвинутый по времени, т.е. отличается от календарного. Например, не 01.01.2019-31.01.2019, а 05.01.2019-01.02.2019 или 01.01.2019-29.01.2019. Можно конечно было допольнительно запрашивать год и месяц у пользователя, но они ж ленивые ) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 14:31 |
|
|
start [/forum/topic.php?fid=41&msg=39762047&tid=1581703]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 453ms |
0 / 0 |