私の理解が正しく、当月の最初の日から始まるイベントのみを選択したい場合は、次のようにすることができます
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
(event_date
列の場合) とtime
(の場合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のデモです