2016-04-03 6 views
0

ich habe Semesterwerte wie Herbst 2011, Frühling 2011 und so weiter. Ich möchte das Ergebnis, um in sequentieller Weise Beispielorder by semester term in oracle

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

aber ich

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

immer bin, wenn dies durch in Ihrem Auftrag order by semester

Antwort

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

Dies analysiert die Zahlen aus dem Text, so dass Sie zuerst nach Jahr, dann nach dem Text bestellen können.

Oder Sie könnten nur die richtigen 4 die meisten Zeichen und Ordnung zuerst von ihnen bekommen ... Assming die richtigen 4 die meisten Zeichen wird immer das Jahr sein ...

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

Verwenden Sie einen CASE-Ausdruck zu tun:

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; 

Sie c Machen Sie den CASE-Ausdruck so beliebig komplex, wie Sie benötigen.

Viel Glück.

0

Es gibt eine Reihe von möglichen Lösungen. Wenn Sie die Tabelle ändern können, würde ich ein Datumsfeld hinzufügen, das das Enddatum jedes Semesters darstellt. Dann können Sie bis zum gewünschten Datum bestellen, um die gewünschte Bestellung zu erhalten.