2011-01-04 15 views
0

ich wenige Nummer haben setzt, dass ichMySQL Sortierung Nummer Ausgabe

4.13.1.5, 4.13.1, 4.10.5, 4.9.97 

zu Wort ich versucht, aber wenn ich durch die Funktion mysql verwenden, um irgendwie sortiert sie in einer seltsamen Art und Weise aus.

4.13.1.5, 4.13.1, 4.9.37, 4.10.5 

Sollte es sein, dass 4.9 am Ende kommt? Fehle ich hier etwas?

+0

Könnten Sie bitte Ihre Anfrage posten? –

+0

Das sind nicht die gleichen (das erste hat '4.9.97' und das zweite' 4.9.37'). Könnten Sie die genauen Strings posten, von denen Sie sprechen? – ircmaxell

+0

Ihre Daten enthalten keine '4.9'. Es gibt '4.9.37' und das sollte nach vorne oder nach unten gehen, je nachdem, ob' .' vor oder nach den Ziffern sortiert. Bitte sagen Sie uns, wie die Abfrage aussieht und welchen Datentyp Sie für die "Nummern" verwenden. – Oswald

Antwort

2

Da es sich um technisch Strings und nicht die Zahlen, ist MySQL die richtige Sache zu tun. Die . (Zeichen 46) ist in Sortierreihenfolge höher als jede der Zahlen (Zeichen 48-59). Wenn es darum geht, die Zeichenkette zu vergleichen, wird sie nach ASCII-Werten nicht in Token aufgeteilt und verglichen.

+0

Das macht keinen Sinn, da alle "Nummern" die gleichen führenden ersten 2 Zeichen haben. Also sollte es auf der dritten + (1, 1, 9, 1 aus der Reihenfolge der Ergebnisse) sortieren. Es macht also keinen Sinn, warum die 9 in der 2. Position wäre ... (Es sei denn, ich lese nicht) ... – ircmaxell

0

Werke für mich:

mysql> create table test (value varchar(10)); 
Query OK, 0 rows affected (0.18 sec) 


mysql> insert into test values ("4.13.1.5"), ("4.13.1"), ("4.10.5"), ("4.9.97") 
    -> ; 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

mysql> select value from test order by value; 
+----------+ 
| value | 
+----------+ 
| 4.10.5 | 
| 4.13.1 | 
| 4.13.1.5 | 
| 4.9.97 | 
+----------+ 
4 rows in set (0.00 sec) 

+0

Warum kommt 4.10 ganz oben? Sollte nicht 4.13 an der Spitze kommen – Chirag

+1

Der Vergleich ist nicht numerisch (das sind Strings, und 0 kommt vor 3). – krakover