我需要按日期(降序)对表进行排序,但表中的所有列都是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,而不是找到的实际值。
答案 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