选择CHAR时间

时间:2015-03-14 04:41:14

标签: sql sql-server

SQL Fiddle

SQL Server安装程序:

CREATE TABLE Time
(
    Time NCHAR(8),
    TimeOrder INT,
)
CREATE TABLE Event
(
    StartTime NCHAR(8),
    EndTime NCHAR(8),
)
INSERT INTO Time(Time, TimeOrder)
VALUES   ('09:00 AM',1)
        ,('09:30 AM',2)
        ,('10:00 AM',3)
        ,('10:30 AM',4)
        ,('11:00 AM',5)
        ,('11:30 AM',6)
        ,('12:00 PM',7)
        ,('12:30 PM',8)
        ,('01:00 PM',9)
        ,('01:30 PM',10)
        ,('02:00 PM',11)
        ,('02:30 PM',12)
        ,('03:00 PM',13)
        ,('03:30 PM',14)
        ,('04:00 PM',15)
        ,('04:30 PM',16)
        ,('05:00 PM',17)
        ,('05:30 PM',18)
        ,('06:00 PM',19)
        ,('06:30 PM',20)
        ,('07:00 PM',21)
        ,('07:30 PM',22)

INSERT INTO Event(StartTime, EndTime)
VALUES  ('09:30 AM','11:00 AM')
        ,('11:30 AM','4:00 PM')

我希望能够从Time表中选择Event StartTimeEndTime之间的所有时间段。我尝试过一些事情,但我不确定该去哪儿?

预期的查询结果:

|     Time | TimeOrder |
|----------|-----------|
| 09:30 AM |         2 |
| 10:00 AM |         3 |
| 10:30 AM |         4 |
| 11:00 AM |         5 |
| 11:30 AM |         6 |
| 12:00 PM |         7 |
| 12:30 PM |         8 |
| 01:00 PM |         9 |
| 01:30 PM |        10 |
| 02:00 PM |        11 |
| 02:30 PM |        12 |
| 03:00 PM |        13 |
| 03:30 PM |        14 |
| 04:00 PM |        15 |

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你应该可以通过加入来做到这一点:

SELECT t.Time 
FROM Time t join
  Event e on CONVERT(time, t.time) >= CONVERT(time, e.startTime) and
    CONVERT(time, t.time) <= CONVERT(time, e.EndTime)

将时间存储为时间数据类型而不是nchar(8)可能是有意义的,因此不需要CONVERT。