2017-01-16 4 views
0

Ich habe Spalte von Monat und Jahr, dass der Datentyp varbinary ist.Wie sortiere ich nach Monat, Jahr in MySQL?

Ich habe versucht:

SELECT * FROM traffic 
WHERE '2015'<= year AND year <='2015' 
    AND NOT (
     (2015= year AND month <05) OR 
     (2015= year AND month >11) 
    ) ORDER BY Year, month; 

Die Ausgabe lautet:

month 
10 
11 
5 
6 
7 
8 
9 

aber ich

wollen
month 
5 
6 
7 
8 
9 
10 
11 

Was kann ich tun, um die erwartete Ausgabe zu bekommen?

+0

Spaltendatentypen? (Speichern Sie Datums-/Uhrzeitwerte nicht in varchar, verwenden Sie die richtigen Datentypen.) – jarlh

+0

Monat + 0 wird ausreichen, aber speichern Sie ganze Zahlen als Ganzzahlen – Strawberry

Antwort

1

Versuchen Sie dieses, werfen

select * from traffic 
WHERE '2015'<= year AND year <='2015' 
    AND NOT (
     (2015= year AND month <05) OR 
     (2015= year AND month >11) 
    ) ORDER BY Year * 1,month * 1; 

* 1 wird String-Datentyp in Monat integer konvertieren.

+0

Vielen Dank SIR – khush

+0

Willkommen! Wenn meine Antwort Ihr Problem löst, können Sie meine Antwort akzeptieren. – rahulsm

+2

@khush Ich habe auf dein Profil geschaut, und du akzeptierst keine Antworten. Bitte nimm dir die Zeit, um das (V) auf der linken Seite der richtigen Antwort zu markieren, damit die Leute, die dir geantwortet haben, ihre Belohnung bekommen. – sagi

2

Sie müssen den Monat String in int

order by cast(month as unsigned) 
+0

Fügen Sie ASC hinzu, so dass es vom kleinsten zum größten geht: Sortieren nach Monat als unsigned) ASC –

+4

@OriNachum 'ASC' ist die Standardbestellung, keine Notwendigkeit, es aufzuschreiben. – sagi

0

Mein Vorschlag ist, den Datentyp year und month zu INT in Tabelle selbst zu ändern, weil sie keinen Nutzen haben, wenn es in VARCHAR gespeichert ist, dann Ihren eigenen Code ausführen, und es wird erwartet Ergebnis zurück, ohne Änderungen vorzunehmen

ALTER TABLE <tablename> MODIFY <columnname> INT UNSIGNED; 
Verwandte Themen