2016-12-16 2 views
-1

ich habe eine Spalte, die Daten wie folgt enthält:Wie wird nach einem bestimmten Format aus einer Spalte sortiert?

{Population: 1331415} 
{Population: 44234} 
{Population: 214124212} 
{Population: 222222} 

Ich brauche die Datenbank durch die Zahl nach {Bevölkerung zu bestellen: und durch eine andere Spalte namens Namen (es Namen von Städten enthält)

+0

Zunächst einmal, warum Sie Daten wie die Speicherung sind. Es kann in zwei verschiedenen Spalten gespeichert werden oder wenn 'Population' der einzige Wert ist, dann kann es als Spalte erstellt werden –

+0

Ist dies eine einfache Datei, und dürfen Sie externe Shell-Utilities oder nur native SQL-Abfragen verwenden? – Inian

+0

Nur um zu verstehen, welche Sprache zu verwenden ist: Was hast du versucht? –

Antwort

1

Eine Methode ist, um die Länge und den Wert zu verwenden:

order by length(col) desc, col desc 

Ein weiterer Grund ist den numerischen Wert zu extrahieren und sie in eine Zahl umwandeln:

order by substring_index(col, ': ', -1) + 0 desc 
+0

Wenn ich versuche, eine Funktion wie diese zu verwenden, heißt das, dass die Funktion nicht installiert ist. Ich benutze mysql von einem Terminal –

+0

@ Gordon Linoff - schön, um 0 zu addieren, um die **} ** am Ende der Zeile zu eliminieren - vote up –

+1

@BerndBuffen - Ich glaube, dass es ist, die Daten implizit in 'int 'um String-Bestellung zu vermeiden –

1

Verwendung GNU sort, mit -n für numerische Sortierung und -k Flag für die Sortierung basierend auf dem 2nd Feld.

sort -n -k2 file 
{Population: 44234} 
{Population: 222222} 
{Population: 1331415} 
{Population: 214124212} 
+0

Sie können 'sort -V Eingabedatei' auch hinzufügen, wenn Sie möchten. –

0

prüfen Dieses.

  ORDER BY 
      CONVERT((REPLACE (substring_index(ColumnName, ': ',-1),'}','')), 
      UNSIGNED INTEGER) DESC 

Probe:

 SELECT * , 
     CONVERT((REPLACE(substring_index(A, ': ',-1),'}','')),UNSIGNED INTEGER)'ORDER' 
     FROM (
      SELECT '{Population: 1331415}' AS A UNION 
      SELECT '{Population: 44234}' UNION 
      SELECT '{Population: 214124212}' UNION 
      SELECT '{Population: 222222}' 
      )B 
     ORDER BY 
     CONVERT((REPLACE (substring_index(A, ': ',-1),'}','')), UNSIGNED INTEGER) 
     DESC 

Ausgang:

enter image description here

Verwandte Themen