2016-04-08 25 views
0

Ich habe eine Spalte in MySQL-Tabelle, die ‚chaotisch‘ gespeicherten Daten als Text wie folgt hat:MySQL Spalte, die Daten Fasst aus einer anderen Spalte

**SIZE** 
2 
2-5 
6-25 
2-10 
26-100 
48 
50 

ich eine neue Spalte „RevTextSize“ erstellen möchten, die neu geschrieben die Daten in dieser Spalte zu einem vordefinierten Wertebereich.

If Size=2, then "RevTextSize"= "1-5" 
If Size=2-5, then "RevTextSize"= "1-5" 
If Size=6-25, then "RevTextSize"="6-25" 
... 

Dies ist einfach in Excel, SPSS und anderen Werkzeugen zu tun, aber wie kann ich es in der MySQL-Tabelle zu tun?

Antwort

1

Sie können eine Spalte wie folgt hinzu:

ALTER TABLE messy_data ADD revtextsize VARCHAR(30); 

die Spalte zu füllen:

UPDATE messy_data 
    SET revtextsize 
     = CASE 
     WHEN size = '2'  THEN '1-5' 
     WHEN size = '2-5' THEN '1-5' 
     WHEN size = '6-25' THEN '6-25' 
     ELSE size 
     END 

Diese eine Brute-Force-Ansatz ist, jeden eindeutigen Wert von size Identifizierung und einen Ersatz angeben.


Sie könnten eine andere SQL-Anweisung verwenden Sie beim Aufbau des CASE-Ausdruck auf dem Wiederbeschaffungswert

SELECT CONCAT('  WHEN size = ''',d.size,''' THEN ''',d.size,'''') AS stmt 
    FROM messy_data d 
    GROUP BY d.size 

speichert das Ergebnis aus, dass in Ihren Lieblings-SQL-Text-Editor, und hacken zu helfen. Das würde die Erstellung des CASE-Ausdrucks für die Anweisung beschleunigen, die ausgeführt werden muss, um die Spalte revtextsize (die erste Anweisung) festzulegen.

Wenn Sie etwas "intelligenter" erstellen möchten, das den Inhalt der Größe dynamisch bewertet und eine intelligente Wahl trifft, wäre das aufwändiger. Wenn ich das machen würde, würde ich es in der zweiten Anweisung machen und den CASE-Ausdruck erzeugen. Ich würde es vorziehen, dies zu überprüfen, bevor ich die Update-Anweisung ausführe. Ich bevorzuge es, die update-Anweisung etwas tun zu lassen, das einfach zu verstehen und leicht zu erklären ist, was es macht.

0

Verwenden Sie InStr(), um "-" in Ihrer Zeichenfolge zu suchen, und verwenden Sie SUBSTRING (str, pos, len), um & Endnummer zu erhalten. Dann verwenden Sie die Klausel Zwischen verwenden, um Ihre Case-Klausel zu erstellen.

Ich hoffe, dies wird Ihnen beim Aufbau Ihrer Lösung helfen.

Dank

Verwandte Themen