我有这样的数据的字段(时间):
9:00-11:00 am
7:00-9:00 am
6:30-7:30 pm
1:00-2:30 pmSelect * from表order by time ASC结果:
1:00-2:30 pm
6:30-7:30 pm
7:00-9:00 am
9:00-11:00 am我无法正确地对其进行排序。任何帮助都行。
谢谢
发布于 2011-11-03 10:45:38
将时间存储在两个单独的TIME字段中(例如start_time和end_time ),这两个字段可以按数据库合理地排序。仅仅将时间范围存储为文本并不能告诉数据库任何事情,它不能神奇地理解它的含义。
发布于 2011-11-03 10:46:05
将日期范围存储在MySQL中的两个TIMESTAMP列中,然后可以根据需要对列进行排序。您甚至可以使用MySQL轻松地执行更高级的排序,比如对两个时间戳之间的持续时间进行排序。
发布于 2011-11-03 11:29:04
我不是建议你这样做,而是向你展示为什么你想要像@推荐的那样把它分成多个列。
您可以使用mysql的STR_TO_DATE()将字符串转换为日期。请注意,它完全忽略了时间范围的第一部分,因此它实际上是在排序:
11:00 am
9:00 am
7:30 pm
2:30 pm查询为:
SELECT
time,
STR_TO_DATE(time,'%h:%i-%h:%i %p')
FROM time_table
ORDER BY STR_TO_DATE(time,'%h:%i-%h:%i %p') ASC对此进行有效排序的第二个查询:
9:00am
7:00am
6:30pm
1:00pm是:
SELECT
time,
STR_TO_DATE(CONCAT(SUBSTRING_INDEX(time,'-',1), SUBSTRING(time,LOCATE(' ', time)+1)), '%h:%i%p')
FROM time_table
ORDER BY STR_TO_DATE(CONCAT(SUBSTRING_INDEX(time,'-',1), SUBSTRING(time,LOCATE(' ', time)+1)), '%h:%i%p') ASC(我相信更精通正则表达式的人将能够缩短这段代码)。
https://stackoverflow.com/questions/7989711
复制相似问题