一种选择是创建一个保持表(临时,永久的,您的选择!)某种你平日和他们的排序权重的。
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)
你可以使用正则表达式来提取日期,然后排序,但认为可能是矫枉过正,特别是如果你有很多记录。没有单独列的理由? – 2011-04-02 16:18:14
不应该由字符串排序已按星期排序吗? – 2011-04-02 16:18:45
@darin,我很懒。我得到的记录来自同一个表格行中所有信息的网站,当我最初编写程序时我并不认为要将该日提取到另一列中,我希望能避免重新加入并添加该栏。 @Pekka,它将日子分组,但不是按照星期的顺序。 – 2011-04-02 16:20:22