SELECT 仅记录字段中包含未来日期
SELECT only records with future date in field
我只想select未来的活动
event s_date start_time end_time
event6 2015-01-30 19:45:00 21:45:00
event5 2015-01-29 20:45:00 21:45:00
event4 2015-01-29 19:45:00 21:45:00
event3 2015-01-28 00:30:00 03:00:00
event2 2015-01-27 09:00:00 11:00:00
event1 2015-01-26 19:45:00 21:45:00
我试过了,但没有得到正确的结果
SELECT s_date, DATE_FORMAT(s_date, '%W %D %M') AS date, CONCAT(s_date, ' ', end_time) AS dt
FROM schedule
GROUP BY s_date
HAVING dt >= NOW()
希望我没说错:
select * from
(select s_date, max(concat(s_date,' ',start_time)) as dt
from schedule
group by s_date
) as x
where STR_TO_DATE(x.dt, '%Y-%c-%e %r') >= NOW()
我认为未来事件是尚未播出的事件。
您可以使用 TIMESTAMP()
连接日期和时间,然后将其与当前时间进行比较。
例如,获取尚未开始的事件列表:
SELECT
event, start_time, end_time
FROM
events
WHERE
TIMESTAMP(s_date, start_time) > NOW()
;
请注意,这假定 start_time 和 end_time 的类型为 TIME
。您应该考虑完全删除 s_date
字段并将 start_time
和 end_time
存储为 DATETIME
字段。
切记不要为此使用 TIMESTAMP
字段。尽管它们看起来相似,但 TIMESTAMP
会在记录更改时更新,而 DATETIME
仅存储您明确指定的值。
我不太确定您要对 GROUP BY
子句做什么。如果您使用它,它只会为您提供每个日期的一个事件。它甚至不会为您提供该日期的第一个事件,因为您没有明确设置订单。
如果您能阐明您对该部分的意图,我很乐意尝试改进此答案。
您正在使用 group by
,但您没有聚合任何列...因此您在评估“concat()”表达式时获得的值将是随机的。
检查 this SQL fiddle 的解决方案:
MySQL 5.5.32 架构设置:
create table schedule(
event varchar(50),
s_date date,
start_time time,
end_time time
);
insert into schedule
values ('event6', '2015-01-30', '19:45:00', '21:45:00')
, ('event5', '2015-01-29', '20:45:00', '21:45:00')
, ('event4', '2015-01-29', '19:45:00', '21:45:00')
, ('event3', '2015-01-28', '00:30:00', '03:00:00')
, ('event2', '2015-01-27', '09:00:00', '11:00:00')
, ('event1', '2015-01-26', '19:45:00', '21:45:00');
查询 1:
select s.*
from schedule as s
where concat(s_date, ' ', end_time) > now()
| EVENT | S_DATE | START_TIME | END_TIME |
|--------|--------------------------------|--------------------------------|--------------------------------|
| event6 | January, 30 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 |
| event5 | January, 29 2015 00:00:00+0000 | January, 01 1970 20:45:00+0000 | January, 01 1970 21:45:00+0000 |
| event4 | January, 29 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 |
| event3 | January, 28 2015 00:00:00+0000 | January, 01 1970 00:30:00+0000 | January, 01 1970 03:00:00+0000 |
查询 2:
-- Little trick:
-- In MySQL you can use HAVING without GROUP BY
-- to filter data using column aliases
select s.*, concat(s_date, ' ', end_time) as e_datetime
from schedule as s
having e_datetime > now()
| EVENT | S_DATE | START_TIME | END_TIME | E_DATETIME |
|--------|--------------------------------|--------------------------------|--------------------------------|---------------------|
| event6 | January, 30 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 | 2015-01-30 21:45:00 |
| event5 | January, 29 2015 00:00:00+0000 | January, 01 1970 20:45:00+0000 | January, 01 1970 21:45:00+0000 | 2015-01-29 21:45:00 |
| event4 | January, 29 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 | 2015-01-29 21:45:00 |
| event3 | January, 28 2015 00:00:00+0000 | January, 01 1970 00:30:00+0000 | January, 01 1970 03:00:00+0000 | 2015-01-28 03:00:00 |
希望对您有所帮助
我只想select未来的活动
event s_date start_time end_time
event6 2015-01-30 19:45:00 21:45:00
event5 2015-01-29 20:45:00 21:45:00
event4 2015-01-29 19:45:00 21:45:00
event3 2015-01-28 00:30:00 03:00:00
event2 2015-01-27 09:00:00 11:00:00
event1 2015-01-26 19:45:00 21:45:00
我试过了,但没有得到正确的结果
SELECT s_date, DATE_FORMAT(s_date, '%W %D %M') AS date, CONCAT(s_date, ' ', end_time) AS dt
FROM schedule
GROUP BY s_date
HAVING dt >= NOW()
希望我没说错:
select * from
(select s_date, max(concat(s_date,' ',start_time)) as dt
from schedule
group by s_date
) as x
where STR_TO_DATE(x.dt, '%Y-%c-%e %r') >= NOW()
我认为未来事件是尚未播出的事件。
您可以使用 TIMESTAMP()
连接日期和时间,然后将其与当前时间进行比较。
例如,获取尚未开始的事件列表:
SELECT
event, start_time, end_time
FROM
events
WHERE
TIMESTAMP(s_date, start_time) > NOW()
;
请注意,这假定 start_time 和 end_time 的类型为 TIME
。您应该考虑完全删除 s_date
字段并将 start_time
和 end_time
存储为 DATETIME
字段。
切记不要为此使用 TIMESTAMP
字段。尽管它们看起来相似,但 TIMESTAMP
会在记录更改时更新,而 DATETIME
仅存储您明确指定的值。
我不太确定您要对 GROUP BY
子句做什么。如果您使用它,它只会为您提供每个日期的一个事件。它甚至不会为您提供该日期的第一个事件,因为您没有明确设置订单。
如果您能阐明您对该部分的意图,我很乐意尝试改进此答案。
您正在使用 group by
,但您没有聚合任何列...因此您在评估“concat()”表达式时获得的值将是随机的。
检查 this SQL fiddle 的解决方案:
MySQL 5.5.32 架构设置:
create table schedule(
event varchar(50),
s_date date,
start_time time,
end_time time
);
insert into schedule
values ('event6', '2015-01-30', '19:45:00', '21:45:00')
, ('event5', '2015-01-29', '20:45:00', '21:45:00')
, ('event4', '2015-01-29', '19:45:00', '21:45:00')
, ('event3', '2015-01-28', '00:30:00', '03:00:00')
, ('event2', '2015-01-27', '09:00:00', '11:00:00')
, ('event1', '2015-01-26', '19:45:00', '21:45:00');
查询 1:
select s.*
from schedule as s
where concat(s_date, ' ', end_time) > now()
| EVENT | S_DATE | START_TIME | END_TIME |
|--------|--------------------------------|--------------------------------|--------------------------------|
| event6 | January, 30 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 |
| event5 | January, 29 2015 00:00:00+0000 | January, 01 1970 20:45:00+0000 | January, 01 1970 21:45:00+0000 |
| event4 | January, 29 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 |
| event3 | January, 28 2015 00:00:00+0000 | January, 01 1970 00:30:00+0000 | January, 01 1970 03:00:00+0000 |
查询 2:
-- Little trick:
-- In MySQL you can use HAVING without GROUP BY
-- to filter data using column aliases
select s.*, concat(s_date, ' ', end_time) as e_datetime
from schedule as s
having e_datetime > now()
| EVENT | S_DATE | START_TIME | END_TIME | E_DATETIME |
|--------|--------------------------------|--------------------------------|--------------------------------|---------------------|
| event6 | January, 30 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 | 2015-01-30 21:45:00 |
| event5 | January, 29 2015 00:00:00+0000 | January, 01 1970 20:45:00+0000 | January, 01 1970 21:45:00+0000 | 2015-01-29 21:45:00 |
| event4 | January, 29 2015 00:00:00+0000 | January, 01 1970 19:45:00+0000 | January, 01 1970 21:45:00+0000 | 2015-01-29 21:45:00 |
| event3 | January, 28 2015 00:00:00+0000 | January, 01 1970 00:30:00+0000 | January, 01 1970 03:00:00+0000 | 2015-01-28 03:00:00 |
希望对您有所帮助