使用Google SQL将TIME(1-24)类型转换为五类字符串时段
解决方案:单查询内实现时段分类
完全不需要创建单独的转换表,直接在单个SQL查询里就能完成start_time_of_day的时段分类,用CASE语句即可实现,步骤如下:
1. 将时间字段转换为整数分钟数
把HH:MM格式的时间转成当天的总分钟数,方便做区间判断,比如:
03:01→3*60 + 1 = 18107:00→7*60 = 420
不同数据库的转换函数略有差异,以MySQL为例:
-- 转换为当天总分钟数 TIME_TO_SEC(start_time_of_day) DIV 60 AS time_minutes
2. 用CASE语句匹配时段类别
基于转换后的分钟数,通过CASE判断所属时段,注意深夜(Late Night)是跨天区间,需要单独处理:
SELECT start_time_of_day, CASE WHEN TIME_TO_SEC(start_time_of_day) DIV 60 BETWEEN 181 AND 420 THEN '凌晨(Early Morning)' WHEN TIME_TO_SEC(start_time_of_day) DIV 60 BETWEEN 421 AND 720 THEN '上午(Morning)' WHEN TIME_TO_SEC(start_time_of_day) DIV 60 BETWEEN 721 AND 1020 THEN '下午(Afternoon)' WHEN TIME_TO_SEC(start_time_of_day) DIV 60 BETWEEN 1021 AND 1320 THEN '傍晚(Evening)' WHEN TIME_TO_SEC(start_time_of_day) DIV 60 > 1320 OR TIME_TO_SEC(start_time_of_day) DIV 60 <= 180 THEN '深夜(Late Night)' END AS time_period FROM your_table_name;
3. 为什么不用单独建表?
这种时段规则是固定静态的,直接写在查询里更简洁高效,不需要额外维护映射表。除非后续时段规则需要频繁修改,那时建表存储映射关系会更便于维护,但当前场景下,单查询实现是最优选择。
内容的提问来源于stack exchange,提问作者Sohan
相关产品推荐
相关产品推荐

