0

我在下面的同一字段中有一个带有月份和年份的 mysql 表。

+----------------+
|    duedate     |
+----------------+
|   Sept '12     | 
|   Oct '12      | 
|   Nov '12      | 
|   May'13       | 
|   Mar'13       | 
|   Mar '13      | 
|   Jan '13      | 
|   Feb '13      | 
|   Dec '12      | 
|   Aug '12      | 
|   Apr '13      | 
+----------------+

我想通过按 DESC 顺序对月份和年份值进行排序来检索此表,如下所示。

+------------+
|  duedate   |
+------------+
|   May'13   | 
|   Apr '13  | 
|   Mar '13  | 
|   Mar'13   | 
|   Feb '13  | 
|   Jan '13  | 
|   Dec '12  | 
|   Nov '12  |
|   Oct '12  |
|   Sept '12 |
|   Aug '12  | 
+------------+

是否可以按上述方式排序.. 我尝试过下面的 sql 查询,但它仅按年份值的 DESC 对数据进行排序,月份排序不起作用..

"SELECT DISTINCT duedate FROM sample_table ORDER BY substr(duedate, -2) DESC, FIELD(duedate, 'Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'May', 'Apr', 'Mar', 'Feb', 'Jan')"

请帮忙..

4

3 回答 3

1

您应该将日期存储在DATE类型中,而不是像您正在做的那样存储在 aVARCHAR或 a中。CHAR

在这种情况下,您可以非常简单地按照您想要的顺序检索数据,只需使用ORDER BY以下方式:

select * from YOURTABLE order by date asc

如果出于任何原因您无法更改此设置,我建议您在表中添加另一列(read_date例如称为),然后使用以下内容更新您的表:

update table YOURTABLE set real_date = date

这会将正确的值添加到列中,您将能够正确处理日期。

如果您仍然不想这样做,您始终可以使用STR_TO_DATE函数将数据强制转换为日期,如下所示:

SELECT * FROM YOURTABLE ORDER BY STR_TO_DATE(date, '%b %y') DESC;

有关 Mysql 日期格式的更多信息,请点击此处

于 2013-05-08T08:41:48.777 回答
0

对这些数据进行排序并不是特别容易,因为数据库将其视为将按字母数字而非日期顺序排序的文本。

最好的解决方案是添加月份和年份字段并将值存储为整数,然后使用 PHP date() 格式输出字符串值。然后你可以按照你想要的方式按整数排序

或者,您可以FIELD在查询中使用关键字进行排序,但这不是最好的方法

SELECT * FROM YOURTABLE ORDER BY FIELD(duedate, 'May 13', 'Jun 13', 'Jul 13', ....)
于 2013-05-08T08:44:14.457 回答
0

你可以这样尝试-

SELECT STR_TO_DATE(duedate,'%M \'%Y') as due  FROM demo ORDER BY due DESC

我不确定,但尝试在 mysql 中使用str_to_date

请参阅 dem 链接:SQLFIDDLE

于 2013-05-08T08:44:28.240 回答