我在一个列中有一个奇怪的日期格式的表作为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
等... ECT
我有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
任何想法?
答案 0 :(得分:0)
您应该将日期信息加载到Date列而不是数据库中的varchar列。如前所述,这是日期的ISO格式。
答案 1 :(得分: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字段,您应该转换将数据导入数据库的时间。
答案 2 :(得分:0)
需要在区间内添加。
where event_date + INTERVAL duration MINUTE >= NOW()