在oracle中按学期学期订购

时间:2016-04-03 17:16:35

标签: sql oracle sql-order-by

我有学期的学期价值,如2011年秋季,2011年春季等。 我希望结果按顺序排序 示例

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

然而我正在

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

执行order by semester

3 个答案:

答案 0 :(得分:1)

SELECT Semester 
FROM Table
ORDER BY regexp_replace(Semester, '[^0-9]+', ''),
         regexp_replace(Semester, '[^a-zA-Z]+', '')

这解析了文本中的数字,因此您可以先按年份排序,然后按文本排序。

或者你可以获得正确的4个大多数角色并先按顺序排序...... 确定正确的4个大多数角色将永远是年...

SELECT Semester
FROM Table
ORDER BY substr('spring 2001',-4), semester

答案 1 :(得分:0)

在ORDER BY中使用CASE表达式:

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;

您可以根据需要将CASE表达式设置为任意复杂。

祝你好运。

答案 2 :(得分:0)

有许多可能的解决方案。如果您能够修改表格,我会添加一个表示每个学期结束日期的日期字段。然后您可以按日期订购以获得所需的订单。