我已經有幾個月存儲在像這樣的表格中,「十二月,八月,七月」等。我如何排序我的查詢,以便按時間順序而不是按字母順序排列?我可能需要從字符串轉換爲時間來獲得一個數字,然後順序,我可以在PHP中做到這一點,但不知道如何直接在查詢中做到這一點,所以我不必做一個查詢,使用PHP操縱一些數據,然後使用它進行另一個查詢。MySQL月份作爲字符串存儲,如何按照時間順序而不是按字母順序排列?
MySQL可以在查詢中執行此操作嗎?
謝謝。
我已經有幾個月存儲在像這樣的表格中,「十二月,八月,七月」等。我如何排序我的查詢,以便按時間順序而不是按字母順序排列?我可能需要從字符串轉換爲時間來獲得一個數字,然後順序,我可以在PHP中做到這一點,但不知道如何直接在查詢中做到這一點,所以我不必做一個查詢,使用PHP操縱一些數據,然後使用它進行另一個查詢。MySQL月份作爲字符串存儲,如何按照時間順序而不是按字母順序排列?
MySQL可以在查詢中執行此操作嗎?
謝謝。
是的,你會討厭這樣的: -
order by
case month_column
when "January" then 1
when "February" then 2
...
when "December" then 12
end case
有mysql中
mysql> select str_to_date('January', '%M'); +------------------------------+ | str_to_date('January', '%M') | +------------------------------+ | 0000-01-00 | +------------------------------+ --> sorting order by str_to_date(column_name, '%M')
既然你不打算提供其他信息(年,日,時間的另一個str_to_date功能),
所以這個功能也會起作用。
最好的辦法是所有的字符串轉換成小整數,
這是正確的做法,並有最好的優化
我會做的是創建另一個表
CREATE TABLE MONTH_NAME
(
MONTH_NAME VARCHAR, // or whatever type the month is in your db
MONTH_NUMBER INT
)
裝滿「月」,1等
然後在查詢連接兩個表在這裏月份名稱和順序由MONTH_NUMBER 。
如果你有一個months
表,那麼你可以訂購month_number
。
select field from tablename join months using (month_name)
order by month_number asc;
例如
insert into months (month_name, month_number)
values ('January', 1), ('February', 2), ...
我會在表中添加一個db類型的整數。然後,我會創建另一個參考表與monthes Col1名稱:一月Col2值:1:Col1名稱:二月Col2值:2 ..等 然後,我會內部加入名稱,並按值排序。工程100%
您可以使用CASE statement:
SELECT
CASE
WHEN `month` = 'January' THEN 1
WHEN `month` = 'February' THEN 2
WHEN `month` = 'March' THEN 3
WHEN `month` = 'April' THEN 4
WHEN `month` = 'May' THEN 5
....
END AS orderbymonth
FROM yourtable
ORDER BY orderbymonth ASC
試試這個:
SELECT * FROM tablename ORDER BY FIELD(month_column,
'December', 'November', 'October',
'September', 'August', 'July',
'June', 'May', 'April',
'March', 'February', 'January') DESC, month_column ASC
希望這會有所幫助。
你說得對,我討厭那種基於案例的解決方案。但無論如何,這根本不是一個理想計劃的數據庫。我用str_to_date解決方案完成了你的訂單。謝謝。 – 2011-12-16 19:44:05