【问题标题】:how to sort data by varchar date in ascending order and time in descending order in MySql? [duplicate]如何在MySql中按varchar日期升序和时间降序对数据进行排序? [复制]
【发布时间】: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


【解决方案1】:

日期列也需要 str_to_date

SELECT * 
FROM `News_Data` 
ORDER BY STR_TO_DATE(Date,'%d-%b-%Y')  ASC, STR_TO_DATE(Time, '%l:%i %p') DESC;

【讨论】:

  • OP:按varchar日期升序和时间降序排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多