|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
Написал разными способами скалярную функцию, которая принимает стартовую дату и количество рабочих дней, должна возвращать конечную дату, с учетом праздников, выходных и выходных которые стали рабочими днями. Учет выходных дней, которые стали рабочими в таблице j_Holidays со статусом 0(там список дат у которых статус 0), учет праздников в таблице j_Holidays со статусом 1 (список дат и статус 1). [img=] Алгоритм вроде правильный, но почему то конечная дата выводится неправильно. К примеру ввожу начальную дату '2020-01-01 00:00:00.000' и количество рабочих дней 1. В таблице праздники идут с 2020-01-01 по 2020-01-03 и с 2020-01-06 по 2020-01-08. По логике конечная дата должна быть 2020-01-04, но функция выдает почему то 2020-01-09. Вот один из способов, которые написал: Код: 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 16:44 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
Написали ужасного монстра - теперь отладкой займитесь. Еще я бы уточнил, какой день по вашим настройкам сервер считает первым в неделе. Явной установки, что это понедельник, в коде не наблюдается. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 16:50 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, Код: sql 1.
Это условие на субботу и воскресенье Да вроде не монстра. Могу алгоритм нарисовать, если это как то поможет. А помощь нужна :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 17:03 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
iLinks, Еще раз. В разных странах неделя начинается в разные дни недели и в разных странах понедельник будет иметь разный порядковый номер. И суббота с воскресеньем тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 17:09 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 17:34 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
Вообще-то, правильным вариантом будет: 1. Сходить вот сюда: http://data.gov.ru/opendata/resource/8ba5011a-233e-4e01-a1d2-ff5598d0f34f#2/0.0/0.0 2. Скачать и распарсить CSV в нормальную таблицу, лучше вида: Дата - признак рабочий/нерабочий - день недели. 3. Для дней за пределами календаря, например - в будущем или до 1994 года - проставить признак нерабочий день для субботы и воскресенья (например). 4. Считать количество рабочих и нерабочих дней - прямым подсчетом, в интервале дат. 5. Раз в год обновлять табличку. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 17:36 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
Выполните в начале SET DATEFIRST 4; Всё ещё как на вашем рисунке? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 20:01 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
iap, Я не могу выполнить Код: sql 1.
так как это рабочий сервер и там многие процедуры из за этого могут полететь. Но первый день недели на сервере - это воскресенье. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 20:15 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
iLinks Да вроде не монстра. Могу алгоритм нарисовать, если это как то поможет. А помощь нужна :) Код: sql 1. 2.
Вместо if exists чего стоит iLinks Могу алгоритм нарисовать, если это как то поможет. А помощь нужна :) Если не хотите сделать нормально, как написал uaggster, то хотя бы сделайте из вашего монстра один запрос, по типу Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 21:04 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
iLinks, Ваша задача решается одним запросом и без заумных циклов. Код: 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.
Таблицу праздников добавите самостоятельно. И вместо скалярной функции сделать инлайновую ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 21:08 |
|
Скалярная функция для расчета конечной даты
|
|||
---|---|---|---|
#18+
iLinks iap, Я не могу выполнить Код: sql 1.
так как это рабочий сервер и там многие процедуры из за этого могут полететь. Но первый день недели на сервере - это воскресенье. Никто, кроме вас, не заметит. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2020, 21:21 |
|
|
start [/forum/topic.php?fid=46&msg=39954720&tid=1686158]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 143ms |
0 / 0 |