我有一张叫做DrTimings的桌子,医生每天的时间就是这个。
DrID(int identity) StartTime(DateTime) EndTime(DateTime)
1 3/31/2009 8:00:00 AM 3/31/2009 10:30:00 AM
我有另一个名为TimeList的表,其中包含3个字段
SlotID SlotStartTime(varchar) SlotEndTime(varchar)
1 8:00AM 8:15AM
2 8:15AM 8:30AM
3 8:30AM 8:45AM
并持续到晚上7点
我有另一个表DrDutyDetails,其中DrTiming设置为整整一个月。
DrID StartTime EndTime DateOfAllocation
1 4/5/2009 8:00:00 AM 4/5/2009 9:30:00 AM 4/5/2009 12:00:00 AM
2 4/12/2009 8:00:00 AM 4/12/2009 9:30:00 AM 4/12/2009 12:00:00 AM
likewise
我有另一张名为AppointmentSchedule的表,当患者请求预约
时会填满AppointmentID SlotID AppointmentDate
1 1 4/5/2009
2 3 4/12/2009
我有一个约会时间表表单,我在其中选择DrID和约会日期。然后对应于未在Appointmentschedule中的日期的插槽,但插槽应位于DrTimings和TimeSlots中的开始时间和结束时间之间dropdownlist。我需要一个查询来实现这一点。 例如:如果患者输入'4/5/2009'那么除了1和3之外的插槽,但是我希望获得DrTimings。
同样,我希望按时间进行搜索。如果患者随时进入DrTimings进行搜索,例如:上午8:30,那么可用的第一个日期必须显示在文本框中
答案 0 :(得分:0)
您将需要查看日期值的某些Casting / COnverting。这个MSDN article为您提供了一些有关您需要使用的信息。
您可以通过多种方式执行此操作,但理想情况下,您可以执行CONVERT(VARCHAR(50), StartTime)
之类的操作来获取完全格式化的时间。然后,既然您知道结尾格式是上午08:00,那么您可以执行RIGHT(CONVERT(VARCHAR(50), StartTime), 7)
,这样可以获得时间值。
现在,您知道如何将日期操作为部分,您可以从这里执行查询项目所需的各种事项。
为了比较,我将“TimeList”数据存储为DateTime值,这样您就可以使用标准时间比较来实际允许您使用诸如“Between”之类的功能。您可以将它们存储为1/1/1900 08:00 AM或类似。但这需要更改数据模型。如果你想为这类事情提供一些有用的SQL,这里有一篇关于“Essential SQL Server Date, Time, and DateTime Functions”的精彩文章。