2014-09-11 114 views
1

MySQL表: -如何從日期和時間範圍內的數據在MySQL

ID | From_DateTime  | To_DateTime 

1   2014-09-01 10:00:00 2014-09-10 22:00:00 

說明:

我加入數據庫中的表2列日期和時間範圍。上面顯示的數據意味着從2014年9月1日至2014年10月9日是日期範圍,並且從10:00:00到22:00:00是時間範圍。

正場景 - 現在我傳遞2014年9月5日15:00:00我的查詢其進入日期和時間這兩個範圍。我需要的是來自查詢的ID。

負面情景 - 現在我傳遞2014年9月5日23:00:00我的查詢其進入時間進入的範圍,但時間不是在指定的範圍內,所以我應該得到0的結果。

我不知道數據庫查詢,這就是爲什麼我張貼到這裏來從數據庫專家得到一些幫助。

+0

拆分它4列:2個日期和2倍,因爲目前的架構並沒有太大的意義。然後使用'DATE()'+'TIME()'函數進行比較。 – zerkms 2014-09-11 03:43:58

+0

使用這2列是不可能做匹配的?有4列而不是2是強制性的嗎?如果是,我將它分成4列,請你幫助我構建查詢。 – Scorpion 2014-09-11 04:04:09

+0

這是可能的,但沒有多大意義。 'datetime'指向了確切的時間點,而你需要一個'date'和''time'',它們彼此不相關。 – zerkms 2014-09-11 04:06:12

回答

1

像這樣的東西應該工作。可能需要一些調整。

SELECT ID FROM (
    SELECT ID FROM <tablename> 
    WHERE DATE('<dateTimeValue>') BETWEEN DATE(From_DateTime) AND DATE(To_DateTime) 
    AND TIME('<dateTimeValue>') BETWEEN TIME(From_DateTime) AND TIME(To_DateTime) 
    UNION 
    SELECT 0 AS ID FROM DUAL 
) AS a LIMIT 1 
+0

如果我通過'2014-09-05 23:00:00',那麼它也會返回不正確的行,我需要匹配日期和時間。 – Scorpion 2014-09-11 04:02:50

+0

陷阱,編輯上面。子句之間需要2個。 – 2014-09-11 04:05:57

+1

雖然這會讓你放慢腳步。您應該採用上面的建議並創建4列From_Date,To_Date,From_Time,To_Time,以便它們可以被索引,並且不必在每個測試行上運行6個函數 – 2014-09-11 04:09:51

0

SELECT ID FROM date_time WHERE From_DateTime < '2014年9月5日15:00:00' AND To_DateTime> '2014年9月5日15:00:00';

這裏date_time是表名...... 不要忘了把日期用單引號

相關問題