MySQL:如何筛选resetTime在23:50至0:10之间的UserID
查询跨午夜时间段的用户ID
现有数据表结构及数据如下:
| UserID | resetTime |
|---|---|
| 2 | 20:00 |
| 3 | 21:00 |
| 4 | 22:00 |
| 5 | 23:30 |
| 6 | 23:50 |
| 7 | 0:00 |
| 8 | 0:10 |
| 9 | 5:00 |
问题需求
筛选出resetTime在23:50 至 0:10之间的所有UserID。
解决方案
由于resetTime是字符串类型,且目标时间段跨午夜(当天深夜到次日凌晨),直接使用BETWEEN会因为字符串字典序比较规则失效(比如'0:00'字典序小于'23:50'),因此需要拆分条件用逻辑或实现:
SELECT UserID FROM your_table WHERE resetTime >= '23:50' OR resetTime <= '0:10';
如果希望更严谨地基于时间类型比较,可以先将字符串转换为时间类型(以MySQL为例):
SELECT UserID FROM your_table WHERE STR_TO_DATE(resetTime, '%H:%i') >= STR_TO_DATE('23:50', '%H:%i') OR STR_TO_DATE(resetTime, '%H:%i') <= STR_TO_DATE('0:10', '%H:%i');
以上两种写法都会返回符合条件的UserID:6、7、8。
内容的提问来源于stack exchange,提问作者TheCesco1988
相关产品推荐
相关产品推荐

