在 oracle 中按学期排序
order by semester term in oracle
我有学期值,例如 2011 年秋季、spring 2011 年等。
我希望结果按顺序排列
示例
fall 2001
spring 2001
fall 2002
spring 2002
....
但是我得到
fall 2001
fall 2002
.....
spring 2001
spring 2002
.....
做的时候order by semester
在 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 表达式任意复杂。
祝你好运。
有多种可能的解决方案。如果您能够修改 table,我会添加一个日期字段来表示每个学期的结束日期。然后您可以按日期订购以获得想要的订单。
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
我有学期值,例如 2011 年秋季、spring 2011 年等。 我希望结果按顺序排列 示例
fall 2001
spring 2001
fall 2002
spring 2002
....
但是我得到
fall 2001
fall 2002
.....
spring 2001
spring 2002
.....
做的时候order by semester
在 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 表达式任意复杂。
祝你好运。
有多种可能的解决方案。如果您能够修改 table,我会添加一个日期字段来表示每个学期的结束日期。然后您可以按日期订购以获得想要的订单。
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