2012-10-23 22 views
0

我有一個表中有一種奇怪的日期格式的列作爲varchar - 這是公司提供給我的格式 - 中間的T似乎弄亂了事情。PHP MYSQL - 不可能的查詢? - 查找「當前顯示」

EVENTID | EVENT_DATE  | EVENT_DURATION 

1  | 2012-10-14T06:00 | 15 
2  | 2012-10-14T06:15 | 11 
3  | 2012-10-14T06:26 | 14  
4  | 2012-10-14T06:40 | 10 

等... ECT

我有PHP代碼中完全一樣的格式在中間」

$thisin = DateTime::createFromFormat('Y-m-d\TH:i', date('Y-m-d\TH:i')); 
$thisin->setTimeZone(new DateTimeZone('UTC')); 
$thisout= $thisin->format('Y-m-d\TH:i'); 

假設返回當前時間(與怪異的 'T'今天是第14次,當前時間是06:21,我如何根據持續時間匹配「$ thisout from php」和接下來的五行(未來)來查詢當前行

因爲當前時間一個次日期從PHP返回爲「2012-10-14T06:21」查詢應輸出

2 | 2012-10-14T06:15 | 11  (Now SHowing) 
3 | 2012-10-14T06:26 | 14  
4 | 2012-10-14T06:40 | 10 

ECT ECT

我一直在抓我的頭幾個小時,DATE_FORMAT()似乎

不工作,我認爲這可能是中間的T。我也必須弄清楚如何使用持續時間來確定當前時間是否適用於特定行。

這不起作用

SELECT DISTINCT EVENTID, EVENT DATE, EVENT_DURATION 
FROM epg_event 
WHERE DATE_FORMAT(EVENT_DATE, '%Y-%m-%dT%H:%i') >= DATE_FORMAT(NOW(), '%Y-%m-%dT%H:%i') 
ORDER BY EVENT_DATE ASC LIMIT 5 

什麼想法?

+0

只是一個注:「奇怪的日期格式」是國際標準ISO 8601(http://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) –

+0

它是絕對正常的日期時間格式。如果您與NOW()比較它會工作,這是MYSQL查詢只..沒有PHP需要:) – Svetoslav

+0

杜先生,查詢現在工作很好,但它拉大於或等於,因爲它幾乎永遠不會超過,如何還可以在查詢之前拉一行?否則它只顯示接下來的內容。 –

回答

0

您應該將日期信息加載到日期列中,而不是數據庫中的varchar列。如前所述,這是日期的ISO格式。

0

我目前還無法測試,但這樣的事情可能工作:

SELECT DISTINCT EVENTID, EVENT_DATE, EVENT_DURATION 
FROM epg_event 
WHERE (event_date <= NOW()) AND (ADDTIME(event_date, INTERVAL event_duration MINUTE) >= NOW()) 
ORDER BY event_date ASC LIMIT 5 

DATE_FORMAT()是指用於格式化DATETIME領域,而不是其他方式。而且,如前所述,event_date應該是DATETIME字段,您應該將數據導入到數據庫時進行轉換。

0

需要在間隔中添加。

where event_date + INTERVAL duration MINUTE >= NOW()