一尘不染

按日期排序(varchar)?

mysql

我想按日期订购。

例如

table_date
February 2011
January 2011
December 2010

我已经尝试过:

SELECT distinct(table_date) FROM tables ORDER BY table_date DESC

伯,这是行不通的。

我得到这个代替:

January 2011
February 2011
December 2010

你能帮我吗?


阅读 406

收藏
2020-05-17

共1个答案

一尘不染

如果要按日期排序, 请将其存储为日期而不是字符串。 除非您的日期字符串的格式为yyyy-mm-dd,否则它不会按您希望的顺序排序。

数据库可以按原样进行足够的工作,而无需人们加倍努力,因此,您应该尽可能地避免我喜欢的 SQL体操。

将其存储为日期,然后(如果需要)使用日期函数以形式获取它February 2011

这样会比您尝试做的要容易得多。


即使由于代码限制而 不能
更改任何当前列,也可以始终将另一列添加到数据库中,TABLE_DATE_AS_DATE然后放入插入/更新触发器以根据进行填充TABLE-DATE

然后做:

update table x set table_date = table_date

或类似方法触发所有行的触发器。

然后,您的查询仍然可以获取,table_date但可table_date_as_date用于订购。当然这是一个麻烦,但是在过去当务之急是代码无法更改时,我不得不使用类似的技巧,因此我们不得不求助于DBMS的技巧。

2020-05-17