Sql Query获取数据

时间:2009-04-02 15:25:42

标签: sql-server-2005

我有一张叫做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,那么可用的第一个日期必须显示在文本框中

1 个答案:

答案 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”的精彩文章。