簡體   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