我有一个包含3列的表; day_id
, start_date
, end_date
. start_date
以及 end_date
varchar(8)的格式是这样的吗 HH:II:SS
. 有时,日期可以超过24小时,以表示某物发生后一天,例如:25:20:01是01:20:01,但在新的一天。 day_id
不是唯一的,而是重复的。我需要得到一天中的第一个和最后一个事件,这是我的代码:
SELECT day_id,
MIN(start_date) as start_time,
MAX(end_date) as end_date
FROM events WHERE day_id IN ('day_1', 'day_2', 'day_3')
GROUP BY day_id ORDER BY start_time ASC
它按预期工作,但我不明白为什么,mysql怎么知道这一点 25:01:45
大于 20:21:09
既然他们都是瓦查尔人?整张table都摆满了 utf8mb4_0900_ai_ci
排序规则,在mysql server版本8上运行。
2条答案
按热度按时间chy5wohz1#
这是一个字符串比较,它将字符与其ascii值进行比较。但它的主要工作原理是将时间参数的一位数和两位数表示为两位数。例如-
1:20:1
表示为01:20:01
2:5:7
表示为02:05:07
所以,永远不会有10:02:07
将在前面出现2:5:7
(自1
<2
)自2:5:7
是02:05:07
以及1
>0
. 因此,它总是有效的。有时,日期可以超过24小时,以表示某天之后发生的事情,例如:25:20:01是01:20:01
所以,如果这个
25
因为某种原因超过2位数,那么你就有问题了。所以,使用正确的数据类型来存储它-TIME
.kmbjn2e32#
mysql怎么知道25:01:45比20:21:09大?
数据库使用排序规则比较字符串。默认排序规则为字母顺序。
所以,mysql知道这一点
'25'
>'20'
就像我们知道'BE'
紧随其后'BA'
在字典里。