一種選擇是創建一個保持表(臨時,永久的,您的選擇!)某種你平日和他們的排序權重的。
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