按DESC顺序在Mysql表中排序日期

时间:2012-02-20 05:59:52

标签: mysql

我想以DESC顺序显示日期列,其中日期输入为VARCHAR,并且是20-JUN-2007的顺序我已经使用了ORDER BY RIGHT(vPublishedDate,4)但它不影响月份和日期< / p>

6 个答案:

答案 0 :(得分:2)

为什么使用VARCHAR来存储DATE?使用DATE存储DATE,然后,就像通过魔法一样,排序可以自行完成。

答案 1 :(得分:2)

以下是使用STR_TO_DATE进行此操作的一种方法(考虑到将列转换为日期的其他答案,尽管您可能无法控制数据库):

SELECT ...
FROM ...
ORDER BY STR_TO_DATE(vPublishedDate,'%d-%M-%Y')

举个例子:

SELECT STR_TO_DATE('20-JUN-2007','%d-%M-%Y') as Date;
+------------+
| Date       |
+------------+
| 2007-06-20 |
+------------+

答案 2 :(得分:1)

确实应该将日期存储为日期,而不是字符类型字段。那你就不用担心这种“SQL体操”(我喜欢称之为)。

数据库用于存储数据,不是格式化。

通过强制自己操作子列,基本上可以防止数据库执行任何有用的优化。

为了使用您拥有的数据执行您想要的操作,您必须执行以下操作:

  • 使用子字符串提取单个子列信息,以便按照您想要的顺序获取它们;和
  • 使用某种查找将“NOV”之类的字符串转换为11(因为月份名称将排序为DEC,FEB,AUG,APR,JAN,JUL,JUN,MAR,MAY,NOV,OCT,SEP)

这将是一个严重的性能杀手。现在可能是一个可以将特定日期格式转换为正确日期的函数,但我恳请您:不要使用它。

设置或更改数据库以使用智能模式,所有这些问题都会神奇地消失。

将日期列转换为任何类型的输出格式要比使用字符列执行相同操作要容易得多。

答案 3 :(得分:0)

如果可以,请将VARCHAR更改为Date类型列。

你也可以试试这个,虽然这是 RIGHT 方法。

通过your_new_date DESC从your_table订单中选择STR_TO_DATE(your_date_column,'%d /%m /%Y')AS your_new_date

答案 4 :(得分:0)

尝试使用str_to_date将varchar转换为日期,然后您可以应用排序逻辑。

答案 5 :(得分:0)

我建议您将类型更改为日期。 然后运行一个脚本,将日期转换为正确的数据库格式。

然后排序就像在MySql中排序ID一样简单