我有學期的學期值,如2011年秋季,2011年春季等。 我想要的結果是在連續的方式 例如按學期在oracle中訂購
fall 2001
spring 2001
fall 2002
spring 2002
....
然而
我越來越
fall 2001
fall 2002
.....
spring 2001
spring 2002
.....
爲了做order by semester
我有學期的學期值,如2011年秋季,2011年春季等。 我想要的結果是在連續的方式 例如按學期在oracle中訂購
fall 2001
spring 2001
fall 2002
spring 2002
....
然而
我越來越
fall 2001
fall 2002
.....
spring 2001
spring 2002
.....
爲了做order by semester
SELECT Semester
FROM Table
ORDER BY regexp_replace(Semester, '[^0-9]+', ''),
regexp_replace(Semester, '[^a-zA-Z]+', '')
這將解析出文本中的數字,以便您可以先按年份排序,然後按文字排序。
或者您也可以通過他們首先得到正確的4個大多數字符和秩序...... Assming右4個字符最多將永遠是一年......
SELECT Semester
FROM Table
ORDER BY substr('spring 2001',-4), semester
使用CASE表達式中的ORDER BY時:
SELECT SEMESTER, whatever
FROM SEMESTER_VALUES
ORDER BY CASE SEMESTER
WHEN 'spring 2001' THEN 1
WHEN 'fall 2001' THEN 2
WHEN 'spring 2002' THEN 3
WHEN 'fall 2002' THEN 4
WHEN 'spring 2003' THEN 5
WHEN 'fall 2003' THEN 6
WHEN 'spring 2004' THEN 7
WHEN 'fall 2004' THEN 8
WHEN 'spring 2005' THEN 9
WHEN 'fall 2005' THEN 10
END;
您c根據需要使CASE表達式任意複雜。
祝你好運。
有許多可能的解決方案。如果您可以修改表格,我會添加一個代表每個學期結束日期的日期字段。然後您可以按日期訂購以獲得所需的訂單。