Проще всего тут сразу всё(
начало_смены -
конец_смены) умножать на
1,5, а потом отнимать
0,5 от того что входит в диапазон дневной смены(как это посчитать - ниже), так получится обойтись одним диапазоном, а не парой. Или просто считать дневной диапазон, а ночной получать как разницу
всего и
дневного, по тем же причинам.
А то что отнимать - есть несколько вариантов.
1) Полностью попадает в дневной диапазон. Т.е.
(
начало_смены >=
начало_дневной) И
(конец_смены <=
конец_дневной)
учитываем (
конец_смены -
начало_смены)
2) Частично попадает слева. Т.е.
(
начало_смены <
начало_дневной )И (
конец_смены <=
конец_дневной)
учитываем (
конец_смены -
начало_дневной)
3) Частично попадает справа. Т.е.
(
начало_смены =>
начало_дневной) И (
конец_смены >
конец_дневной)
учитываем (
конец_дневной -
начало_смены)
4) Полностью закрывает дневную
(
начало_смены <
начало_дневной) И (
конец_смены >
конец_дневной)
учитываем (
конец_дневной -
начало_дневной)
Останется всё только собрать в группу
ЕСЛИ(). 4 условия, т.е. всего 3 вложенных
ЕСЛИ()
ДЕМО таблица