2016-04-03 58 views
0

我有學期的學期值,如2011年秋季,2011年春季等。 我想要的結果是在連續的方式 例如按學期在oracle中訂購

fall 2001 
spring 2001 
fall 2002 
spring 2002 
.... 
然而

我越來越

fall 2001 
fall 2002 
..... 
spring 2001 
spring 2002 
..... 

爲了做order by semester

回答

1
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 
0

使用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表達式任意複雜。

祝你好運。

0

有許多可能的解決方案。如果您可以修改表格,我會添加一個代表每個學期結束日期的日期字段。然後您可以按日期訂購以獲得所需的訂單。