MySQL/MariaDB电影放映数据按4时段格式化技术咨询
按时段分组展示电影放映时间的MySQL查询方案
我来帮你搞定这个需求!要把电影放映时间按指定的四个时段分组展示,用MySQL的条件聚合就能轻松实现,给你写个现成的查询语句:
SELECT film, -- 14:00前的时段(morning) GROUP_CONCAT(CASE WHEN time < '14:00:00' THEN TIME_FORMAT(time, '%H:%i') END SEPARATOR ' ') AS morning, -- 14:00-17:00的时段(afternoon) GROUP_CONCAT(CASE WHEN time >= '14:00:00' AND time < '17:00:00' THEN TIME_FORMAT(time, '%H:%i') END SEPARATOR ' ') AS afternoon, -- 17:00-19:00的时段(evening) GROUP_CONCAT(CASE WHEN time >= '17:00:00' AND time < '19:00:00' THEN TIME_FORMAT(time, '%H:%i') END SEPARATOR ' ') AS evening, -- 19:00后的时段(night) GROUP_CONCAT(CASE WHEN time >= '19:00:00' THEN TIME_FORMAT(time, '%H:%i') END SEPARATOR ' ') AS night FROM your_table_name -- 这里替换成你的实际表名 WHERE date = '2017-03-27' -- 如果只需要查询特定日期,保留这句;要查所有日期就删掉 GROUP BY film;
关键逻辑说明:
GROUP_CONCAT:用来把同一电影同一时段的多个放映时间拼接成空格分隔的字符串,完美适配同一时段有多场放映的场景;如果每个时段最多一场,也可以用MAX()代替,效果是取该时段的唯一时间。TIME_FORMAT(time, '%H:%i'):把数据库里的完整时间格式化为小时:分钟的简洁形式,和你期望的输出格式一致。CASE WHEN:判断每条放映时间属于哪个时段,符合条件就返回格式化后的时间,否则返回NULL,GROUP_CONCAT会自动忽略NULL值,不会在结果里留空字符串。GROUP BY film:确保每个电影只输出一行,对应四个时段的放映时间集合。
用你给的示例数据测试的话,输出结果会和你期望的完全一致:
| film | morning | afternoon | evening | night |
|---|---|---|---|---|
| Lady Bird | 13:40 | 20:00 | ||
| I, Tonya | 15:40 | 17:00 |
内容的提问来源于stack exchange,提问作者user3157493
相关产品推荐
相关产品推荐

