如果我理解正确并且您只想选择从当月第一天开始的事件,那么您可以这样做
SELECT ID, year, month, day, event_loc, event_address, event_link, event_time, event_name
FROM events
WHERE STR_TO_DATE(CONCAT_WS('-', year, month, day), '%Y-%c-%e') >= DATE_FORMAT((CURDATE()), '%Y-%m-01')
ORDER BY year, month, day
这是SQLFiddle演示
现在,为了能够使用索引和范围搜索正常查询您的数据,我建议您更改表的架构以利用datetime
(for event_date
column) 和time
(for event_duration
) 数据类型。建议的架构可能如下所示
CREATE TABLE events
(`ID` int,
`event_date` datetime,
`event_loc` varchar(256),
`event_address` varchar(256),
`event_link` varchar(256),
`event_duration` time,
`event_name` varchar(256)
);
然后查询看起来像
SELECT ID, DATE(event_date) event_date,
event_loc,
event_address,
event_link,
CONCAT(DATE_FORMAT(event_date, '%l:%i%p - '),
DATE_FORMAT(ADDTIME(event_date, event_duration), '%l:%i%p')) event_timee,
event_name
FROM events
WHERE event_date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
ORDER BY event_date
这是SQLFiddle演示