2013-05-04 6 views
5

Hallo Ich möchte mit Alphabeten dheine Hilfe für Art in mysql Need

 
1 
2 
1a 
11a 
a 
6a 
b 

ich .Das Feld enthält Zahlen, Buchstaben und Zahlen, die eine Tabelle sortieren diese sortieren möchten,

 
1 
1a 
2 
6a 
11a 
a 
b

Mein Code ist,

SELECT * FROM t ORDER BY CAST(st AS SIGNED), st
Aber das Ergebnis ist,

 
a 
b 
1 
1a 
2 
6a 
11a 

fand ich diesen Code in dieser uRL

" http://www.mpopp.net/2006/06/sorting-of-numeric-values-mixed-with-alphanumeric-values/ "
Wer mir bitte

+0

Zuerst überprüfen Sie, was CAST zurückgibt. Ich denke, es wird st in eine Zahl umwandeln. Führen Sie diese Abfrage aus: SELECT CAST (st AS UNTERZEICHNET) FROM t –

+0

@ asim-ishaq Es gibt nur Zahlen zurück. Das Ergebnis ist 1,12,11,6,1,2,0,0 –

+0

für Alphabete wird es 0 zurückgeben, so dass sie Immer an der Spitze. wir müssen an eine andere Logik denken –

Antwort

5

Dies würde Ihre erforderliche Sortierreihenfolge, auch in Anwesenheit von 0 in der Tabelle tun;

SELECT * FROM t 
ORDER BY 
    st REGEXP '^[[:alpha:]].*', 
    st+0, 
    st 

An SQLfiddle to test with.

  • Als erste Sortierkriterien, sortiert sie alles, was mit einem Buchstaben beginnt nach alles, was nicht der Fall ist. Das macht die Regexp.
  • als zweites Sortierkriterium es mit der Zeichenfolge beginnt mit dem numerischen Wert sortiert (st+0 0 für den numerischen Teil fügt die Zeichenfolge beginnt mit und gibt einen int)
  • Als letztes Mittel, sortiert sie durch den String selbst Holen Sie sich die alphabetischen in Reihenfolge.
+0

Perfecto! Joachim könnte bitte erklären wie es funktioniert? :) –

+0

ja dies ist die richtige Antwort, +1 :) Ich dachte nicht, dass es einige 0 – fthiella

+0

@Vivek Eine kleine Erklärung hinzugefügt, lassen Sie mich wissen, wenn ich klären muss :) –

-3

Ich habe kleine Änderung in Ihrer Anfrage helfen -

SELECT *, CAST(st AS SIGNED) as casted_column 
FROM t 
ORDER BY casted_column ASC, st ASC 

dies funktionieren soll. in der Theorie sollte Ihre Syntax funktionieren, aber nicht sicher, warum MySQL diese Methoden nach dem Tag nicht akzeptiert. so Temp-Feld erstellt und dann sortiert.

Dies sollte nach meiner Erfahrung funktionieren, und Sie können es überprüfen.

SQL FIDDLE

+0

Es gibt nur Zahlen zurück.Die Casted_column enthält ist 0,0,1,2,6,11,12 –

+1

Nicht für 'a', 'b' usw. Es funktioniert nicht für rein numerisches Datum –

+0

Vivek sein Bedürfnis ist alphanumerisch nicht nur numerisch .. –

0

Der Grund, dass Sie diese Ausgabe erhalten ist, dass alle Zeichen wie ‚a‘, ‚b‘ usw. auf ‚0‘ umgewandelt werden, und wenn Sie Auftrag von ASC verwenden wird es am oberen Rand angezeigt .

SELECT CAST(number AS SIGNED) from tbl 

kehrt

1 
2 
1 
11 
0 
6 
0 

Schauen Sie sich diese Geige: - SQL FIDDLE

+0

Sie haben Recht, aber dies bietet keine Lösung! – hims056

2

Sie diese verwenden können:

SELECT * 
FROM t 
ORDER BY 
    st+0=0, st+0, st 

Mit st+0 der Varchar-Spalte in int gegossen wird. Bestellungen per st+0=0 alphanumerische Reihen am Boden gelegt werden (st + 0 = 0 1 sein wird, wenn die Zeichenfolge mit einem alphanumerischen Zeichen beginnt, Oterwise es 0 sein wird)

Bitte sehen Geige here.

+0

danke you.its arbeitet. –

+1

@NavaneethaNair Sie sind willkommen, aber bitte überprüfen Sie Joachim Isaksson Antwort, seine Antwort funktioniert auch wenn es einige 0 in Ihrem Bereich sind, während meine 0 auf den Boden setzen – fthiella