Пять столбцов
Colour | Day | StartTime | EndTime | AppliesOnBankHolidays
(КРАСНЫЙ: 16:30 - 18:30 с понедельника по пятницу, включая праздничные дни) переводится как
RED|Mon|16:00|18:30|True
RED|Tue|16:00|18:30|True
RED|Wed|16:00|18:30|True
RED|Thu|16:00|18:30|True
RED|Fri|16:00|18:30|True
AMBER: 09:00 - 16:30 и 18:30 - 20:30 с понедельника по пятницу, включая праздничные дни, и 16:30 - 18:30 сб. И вс. Переводится как
AMBER|Mon|09:00|16:30|True
AMBER|Tue|09:00|16:30|True
AMBER|Wed|09:00|16:30|True
AMBER|Thu|09:00|16:30|True
AMBER|Fri|09:00|16:30|True
AMBER|Mon|18:30|20:30|True
AMBER|Tue|18:30|20:30|True
AMBER|Wed|18:30|20:30|True
AMBER|Thu|18:30|20:30|True
AMBER|Fri|18:30|20:30|True
AMBER|Sat|16:30|18:30|False
AMBER|Sun|16:30|18:30|False
И я оставлю третью строку в качестве упражнения!
Не стесняйтесь нормализовать даты и цвета, если вы действительно хотите сэкономить место.Для вопроса о банковских выходных требуется еще одна таблица выходных, к которой вы можете присоединиться в любом используемом запросе:
PSEUDO SQL
SELECT t.Colour, t.StartTime, t.EndTime
FROM Times t
WHERE Day(Today)==t.Day AND NOT (t.AppliesOnBankHolidays==FALSE AND IsBankHoliday(Today))