【发布时间】:2022-01-09 17:25:37
【问题描述】:
我想按 varchar 日期升序和时间降序对数据进行排序。
这是我的桌子:-
name date time
hulk 30-Nov-2021 02:20 PM
hulk 01-Dec-2021 02:20 PM
hulk 02-Dec-2021 02:20 PM
hulk 01-Dec-2021 02:20 PM
hulk 30-Nov-2021 02:20 PM
hulk 30-Nov-2021 02:10 PM
hulk 03-Dec-2021 01:34 PM
这是我的查询:
SELECT *
FROM `News_Data`
ORDER BY Date ASC , STR_TO_DATE(Time, '%l:%i %p') DESC;
运行查询后,我们得到如下结果:
name date time
hulk 01-Dec-2021 02:20 PM
hulk 01-Dec-2021 02:20 PM
hulk 30-Nov-2021 02:20 PM
hulk 01-Dec-2021 02:20 PM
hulk 02-Dec-2021 02:20 PM
hulk 30-Nov-2021 02:10 PM
hulk 03-Dec-2021 01:34 PM
但我想要这样:
name date time
hulk 03-Dec-2021 01:34 PM
hulk 02-Dec-2021 02:20 PM
hulk 30-Nov-2021 02:20 PM
hulk 01-Dec-2021 03:20 PM
hulk 01-Dec-2021 02:23 PM
hulk 01-Dec-2021 01:15 PM
hulk 30-Nov-2021 02:10 PM
有人可以帮我解决这个问题。
【问题讨论】:
-
您必须将 VARCHAR 转换为 DATE,请参阅:How to convert a string to date in MySQL? BTW:“但我想要这样”中的排序:这真的是想要的顺序吗?
-
我们已经尝试过这段代码,但它不起作用。
-
请停止使用“它不起作用”。展示你真正尝试过的东西,并说明为什么输出与你想要的不同。
-
真正的问题是将日期和时间作为字符串存储在表中。格式化是一个表示决定而不是数据类型决定。不断地将字符串值转换为日期和时间,以便您可以对一个很小的测试数据集进行排序或搜索,但在大型生产数据集中这样做可能会非常昂贵。避免养成一个非常坏的习惯。
标签: mysql