我已经将这些月份存储在像“12月,8月,7月”这样的表中,等等。我如何订购我的查询,以便按时间顺序而不是按字母顺序排序?我可能需要从字符串转换为时间来获取一个数字然后按顺序排序,我可以在PHP中执行此操作但不知道如何在查询中直接执行此操作,因此我不必进行查询,使用PHP操纵一些数据,然后使用它进行另一个查询。
MySQL可以在查询中执行此操作吗?
感谢。
答案 0 :(得分:3)
我要做的是创建另一张表
CREATE TABLE MONTH_NAME
(
MONTH_NAME VARCHAR, // or whatever type the month is in your db
MONTH_NUMBER INT
)
填写“1月”,1等
然后在查询中将这两个表加入月份名称并按MONTH_NUMBER排序。
答案 1 :(得分:1)
是的,你会讨厌这个: -
order by
case month_column
when "January" then 1
when "February" then 2
...
when "December" then 12
end case
mysql中还有另一个str_to_date函数
mysql> select str_to_date('January', '%M'); +------------------------------+ | str_to_date('January', '%M') | +------------------------------+ | 0000-01-00 | +------------------------------+ --> sorting order by str_to_date(column_name, '%M')
由于您不打算提供其他信息(年,日,时间), 所以这个功能也可以。
最好的方法是将所有字符串转换为小整数,
这是正确的方法,并有最好的优化
答案 2 :(得分:1)
您可以使用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
答案 3 :(得分:0)
如果您有months
表,则可以按month_number
订购。
select field from tablename join months using (month_name)
order by month_number asc;
e.g。
insert into months (month_name, month_number)
values ('January', 1), ('February', 2), ...
答案 4 :(得分:0)
我会在表db类型整数中添加一列。然后我将使用monthes创建另一个引用表Col1名称:January Col2值:1:Col1名称:February Col2值:2 ..等 然后我会内部加入名称,并按值排序。 100%工作
答案 5 :(得分:0)
试试这个:
SELECT * FROM tablename ORDER BY FIELD(month_column,
'December', 'November', 'October',
'September', 'August', 'July',
'June', 'May', 'April',
'March', 'February', 'January') DESC, month_column ASC
希望这会有所帮助。