按字母顺序排列的MYSQL按日排序

时间:2011-04-02 16:17:02

标签: mysql

我有一堆带有名为“title”的字段的行,其数据如下所示:

Friday  8:00AM - Hunter Arena 2
Wednesday  7:30AM - West Grass Field
Thursday  8:00AM - Hunter Arena 1
Saturday  8:00AM - Hunter Arena 1
Wednesday  8:00AM - Hunter Arena 2 

我希望在本周的某一天订购。 (我假设将涉及解析字符串,然后进行某种日期排序)这是否可以使用MYSQL查询?

提前致谢 -J

2 个答案:

答案 0 :(得分:2)

一种选择是创建一个保留表(临时,永久,您的选择!)某种工作日及其分类重量。

CREATE TEMPORARY TABLE WkDayWeight (weekday varchar(100), orderWeight int); 
INSERT INTO WkDayWeight  (weekday, orderWeight)
   SELECT           'Monday',1
   UNION ALL SELECT 'Tuesday',2 
   UNION ALL SELECT 'Wednesday',3
   UNION ALL SELECT 'Thursday',4
   UNION ALL SELECT 'Friday',5
   UNION ALL SELECT 'Saturday',6
   UNION ALL SELECT 'Sunday',7

然后你可以从你的专栏中提取第一个单词(即找到星期几),并加入工作日排序权重的保留/参考表。

SELECT  * 
FROM    MyTable AS m 
INNER JOIN WkDayWeight   AS d 
  ON d.weekday = SUBSTRING_INDEX(m.MyColumn,' ',1) 
ORDER BY d.orderWeight

实际上有一个datetime列可以自然地排序更为可取。

另一种选择:您可以通过创建可以执行相同操作的用户定义函数来实现另一种方法。然后,您可以通过可疑的性能在ORDER BY中调用UDF。该函数将查找/引用工作日的权重。

  ORDER BY MyWeekdaySortingFunction(m.MyColumn)

答案 1 :(得分:2)

通过...

为订单设置内联案例/时间条款
select 
      yt.YourDataColumns
   from 
      YourTable yt
   order by 
      case when "Sunday" = left( yt.Title, 6 ) then 1
           when "Monday" = left( yt,Title, 6 ) then 2
           when "Tuesday" = left( yt,Title, 7 ) then 3
           when "Wednesday" = left( yt,Title, 9 ) then 4
           when "Thursday" = left( yt,Title, 8 ) then 5
           when "Friday" = left( yt,Title, 6 ) then 6
           else 7
      end