0

我有一个表格,列中有一种奇怪的日期格式,如 varchar - 这是公司为我提供的格式 - 中间的 T 似乎把事情搞砸了。

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

等等……等等

我有php代码以完全相同的格式返回当前时间(中间有奇怪的'T''

$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'); 

假设今天是 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

我一直在摸不着头脑,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

有任何想法吗?

4

3 回答 3

0

您应该将日期信息加载到数据库中的 Date 列而不是 varchar 列中。如前所述,这是日期的 ISO 格式。

于 2012-10-23T08:57:30.520 回答
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 字段,并且您应该在将数据导入数据库时​​转换时间。

于 2012-10-23T09:06:35.997 回答
0

需要在区间内添加。

where event_date + INTERVAL duration MINUTE >= NOW()
于 2012-10-23T09:08:48.467 回答