2010-03-30 55 views
0

我有一张表,其中包含一些学生组名称,课程时间,日程安排等日期名称。我正在使用C#和MySql,并且我希望在用户按下表格中的按钮时找到哪一课。mySQL:在表中使用BETWEEN?

我可以通过输入表中的确切值来找到它,例如, 08:30或10:25。但是我想让系统时间到,并检查它是在08:30和10:25或10:25和12:30之间。然后我可以说这是第一或第二课。

我也有表格,包括Table_Time列有5条记录像08:20,10:25,12:20等。 我可以使用这样:

select Lesson_Time 
from mydb.clock 
where Lesson_Time between (current time)-30 AND (current time)+30 

或者,我可以运营商之间使用两列之间(如创建Lesson_Time_Start和Lesson_Time_End),并比较当前时间像Lesson_Start_Time < current time < Lesson_End_Time

编辑: 更准确地说,问题是我怎么能检查当前时间

我有记录像

Time_ID | Lesson_Time 
    1  08:30 
    2  10:25 
    3  12:20 
    4  14:15 
    5  16:10 

表,当我按下一些按钮,我要检查当前我按下按钮的时间是否等于哪个Time_ID在09:15按下按钮,它必须选择1 th record , if I pressed button at 12:00 it must select 2记录。

回答

1

我会尝试这样的事情。

select 
    Time_ID, 
    Lesson_Time 
from 
    mydb.clock 
where 
    Lesson_Time <= TIME(NOW()) 
order by 
    Lesson_Time DESC 
limit 0, 1 

查询仅限于学习时间的记录早于当前时间排序按时间递减,并返回只有第一个记录,这应该是你想要的记录。 (但是,请注意,午夜会使问题复杂化。)

+0

那是工作))谢谢。 – Ercan 2010-03-30 19:27:35

+0

但它在C#上不起作用。 C#有另一种实现吗? – Ercan 2010-03-30 19:40:43

+0

@Meko它将如何与C#无效?你正在向mySQL发出查询,不是吗? – 2010-03-30 22:21:15

1

我不完全相信你想做的事,但我认为你正在寻找DATE_ADD and DATE_SUB

SELECT Lesson_Time from mydb.clock 
WHERE Lesson_Time between DATE_SUB(NOW(), INTERVAL 30 MINUTE) AND 
          DATE_ADD(NOW(), INTERVAL 30 MINUTE); 
提供Lesson_Time

是正确的DATETIME场,这应该工作。

+0

感谢您的快速回复。我虽然喜欢你的解决方案,但在这里的问题,如果时间是08:50,它会-30分钟08:20但在我的表第一个记录从08:30开始 – Ercan 2010-03-30 17:51:44

+0

你也可以说“NOW()+ INTERVAL 30 MINUTE”。 – 2010-03-30 17:59:40

+0

@Meko所以你想抓住下一个30分钟的时间间隔?那不一样。我不会在mySQL dor中知道一个优雅的解决方案。你能相应地更新你的问题吗? – 2010-03-30 18:29:01