繁体   English   中英

如何使用php从mysql表中的同一字段中对morth和year值进行排序

[英]How to sort morth and year values in the same field from mysql table using php

我在下面的相同字段中具有月份和年份的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')"

请帮忙..

您应该将日期存储为DATE类型,而不是像看起来那样存储在VARCHARCHAR中。

在这种情况下,您可以非常简单地按您想要的顺序以这种方式使用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日期格式的更多信息,请参见此处

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

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

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

SELECT * FROM YOURTABLE ORDER BY FIELD(duedate, 'May 13', 'Jun 13', 'Jul 13', ....)

你可以这样尝试

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

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

请参阅dem链接: SQLFIDDLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM