Мне нужно получить количество «рабочих дней» между любыми двумя заданными датами, и для этой цели я попробовал этот запрос, который отлично работает, но я не могу понять его часть. Пожалуйста, объясните мне это:
SELECT (DATEDIFF(dd, '2015-01-04', '2015-01-10') + 1)-
(DATEDIFF(wk, '2015-01-04', '2015-01-10') * 2)-
(CASE WHEN DATENAME(dw, '2015-01-04') = 'Sunday' THEN 1 ELSE 0 END)-
(CASE WHEN DATENAME(dw, '2015-01-10') = 'Saturday' THEN 1 ELSE 0 END)
Я так много знаю:
- Первая строка получает все дни, включая указанные даты.
- Вторая строка проверяет количество недель, прошедших между этими днями, поэтому из общего числа дней вычитаются требуемые выходные.
Теперь меня смущают последние две строчки. Он проверяет, является ли первая дата воскресеньем, а затем вычитает 1 из общего числа, аналогично тому, чтобы последняя дата была субботой. Но что, если первое свидание — СУББОТА, а последнее — ВОСКРЕСЕНЬЕ?