2015-09-16 47 views
1

我有一個表有整數列startTime和endTime(例如60意味着上午1:00,120意味着上午2:00,1320意味着下午10:00 .... .etc)選擇語句小時開始和結束時間

有時結束時間值可能小於開始時間(開始於晚上10時結束凌晨2點,然後開始時間將是1320和結束時間將是60)

現在,如果用戶輸入11PM找到,如果晚上11點(1380 )是10PM(1320)和2AM(120)之間....我需要找到這個SQL語句是什麼。

我正在使用: select * from dayTimes where 1380 BETWEEN startTime and endTime。

我只需要一個select語句,而無需複雜的查詢

+0

好,如果你只是想檢查,如果1380是開始時間和結束時間之間,你的那個腳本應該工作,它有一定道理 – VJPPaz

+0

@ VJPPaz但在我的情況下,它是檢查MySQL中的PLSQL是否是1380和120 – Dev

+0

?現在的問題是:MySQL或Oracle是你的RDBMS嗎? – Pred

回答

2

如果起始時間和e第二時間不超過24個小時的持續時間,下面的代碼將工作:

select * from dayTimes where 540 BETWEEN startTime and 
if(endTime-startTime>=0,endTime,1440+endTime) 
OR 
540+1440 BETWEEN startTime and 
if(endTime-startTime>=0,endTime,1440+endTime) 
+0

謝謝,但是如果我具有以下值,1080作爲startTime,660作爲endTime,並且用戶輸入了540 .....您的解決方案不適用於這種情況... right – Dev

+0

@Dev:是的。你是對的。我錯過了這一點。我通過使用'OR'添加了另一個條件來糾正查詢。 – seahawk

0

您應該使用Case語句在MySQL這種類型的SQL語句。

對於你的問題,像這樣的東西應該工作。

Select *, 
    Case When startTime>endTime THEN 1380 BETWEEN endtime and endTime+startTime 
     When endTime>startTime THEN 1380 BETWEEN startTime and endTime 
from dayTimes 

此外,你可能想看看這個post

0

你可以打破這個問題分成兩個部分,然後檢查:

第一部分是檢查,如果給定的時間是「開始時間」之間1439(即11:59 PM) 第二部分(進入畫面,如果給定的時間是00:00和endTime之間)

select * from dayTimes where 1300 between startTime and 1439 or 1300 between 0000 and endTime; 
相關問題