varchar上的mysql max和min

eeq64g8w  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(437)

我有一个包含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上运行。

chy5wohz

chy5wohz1#

这是一个字符串比较,它将字符与其ascii值进行比较。但它的主要工作原理是将时间参数的一位数和两位数表示为两位数。例如- 1:20:1 表示为
01:20:01 2:5:7 表示为 02:05:07 所以,永远不会有 10:02:07 将在前面出现 2:5:7 (自 1 < 2 )自 2:5:702:05:07 以及 1 > 0 . 因此,它总是有效的。
有时,日期可以超过24小时,以表示某天之后发生的事情,例如:25:20:01是01:20:01
所以,如果这个 25 因为某种原因超过2位数,那么你就有问题了。所以,使用正确的数据类型来存储它- TIME .

kmbjn2e3

kmbjn2e32#

mysql怎么知道25:01:45比20:21:09大?
数据库使用排序规则比较字符串。默认排序规则为字母顺序。
所以,mysql知道这一点 '25' > '20' 就像我们知道 'BE' 紧随其后 'BA' 在字典里。

相关问题