星期天的多个时间间隔-存储在数据库和处理中的最佳方法

本文关键字:数据库 处理 最佳 方法 时间 星期天 存储 | 更新日期: 2023-09-27 18:00:05

我正在做一个项目,我需要在一周中组合多个时间段来获得有效的时间段。

参见下面的示例

时间槽1=太阳,mon,tue,wedthu和fri,坐09:00到17:00
时间槽2=太阳,mon,tue,wed、thu、fri

时间间隔不适用于bold中的天标记。

有效时隙=

Sun 18:00 to 23:00  
Mon 09:00 to 17:00  
Tue 09:00 to 17:00 and 18:00 to 23:00  
Wed No access  
Thu 18:00 to 23:00  
Fri 09:00 to 17:00  
Sat 09:00 to 17:00 and 18:00 to 23:00

如何将其存储在数据库中,使其易于理解和处理?

星期天的多个时间间隔-存储在数据库和处理中的最佳方法

MS SQL 2008+的表结构

CREATE TABLE TimeSlots(
    id INT identity(1, 1) PRIMARY KEY
    ,groupId int
    );
CREATE TABLE TimeSlotItems(
    id INT identity(1, 1) PRIMARY KEY
    ,slotid INT FOREIGN KEY REFERENCES TimeSlots(id)
    ,weekday VARCHAR(3)
    ,startTime TIME(0)
    ,endTime TIME(0)
    );
-- 2 slots of group 10
INSERT INTO TimeSlots(groupId)
  VALUES (10), (10); 
INSERT INTO TimeSlotItems(slotid,weekday,startTime,endTime)
  VALUES 
   (1, 'Sun', '09:00' ,'17:00')
  ,(1, 'Mon', '09:00' ,'17:00')
  --...
  ,(2, 'Sun', '18:00' ,'23:00')
  ,(2, 'Mon', '18:00' ,'23:00')
;
 SELECT s.groupId, i.* 
 FROM TimeSlotItems i
 JOIN TimeSlots s ON s.Id=i.slotid;