当列声明为varchar时,按日期排序mysql表

时间:2014-09-27 01:14:01

标签: mysql sql

我需要按日期(降序)对表进行排序,但表中的所有列都是varchar,因此我需要动态操作数据以便正确排序。

date        sales
10/09/2014  100
13/09/2014  250
30/08/2014  200

这可能不改变表格吗?那么结果将如下,最新的日期首先?

date        sales
13/09/2014  250
10/09/2014  100
30/08/2014  200

与伪代码一样

SELECT * FROM table ORDER BY (CONCAT(REGEXP(date, '[0-9]{4}'), 
REGEXP(date, '/[0-9]{2}/'), REGEXP(date, '^[0-9]{4}/')) DESC

我想我需要以某种方式使用substring_index,因为regexp只返回1或0,而不是找到的实际值。

2 个答案:

答案 0 :(得分:3)

您需要将varchar - 存储的日期对象转换为DATE个对象,然后使用它们进行排序。

你可以这样做,

  ORDER BY STR_TO_DATE(date,'%d/%m/%Y') DESC

但表现会很糟糕。为了获得最佳效果,请将日期存储在表格的DATE列中。

答案 1 :(得分:2)

您可以使用STR_TO_DATE

SELECT * 
FROM Table1
ORDER BY STR_TO_DATE(date, '%d/%m/%Y') desc,
sales desc