2017-01-20 2 views
2

Ich bin wirklich neu mit SQL und ich habe einige Probleme mit der folgenden Aufgabe: Ich habe eine Spalte mit Textwerten, die Zahlen darstellen. Die Skalen dieser Zahlen sind unterschiedlich, so dass einige Tausende (z. B. 32,11 k) sind, während andere Millionen sind (z. B. 5,40 M). Ich möchte sie in Zahlen in Tausend verwandeln, so dass 32.11k zu 32.11 würde und 5.40M zu 5400.Mysql Update Spalte ersetzen Teil des Textes

Ich dachte, dies könnte für Tausende gearbeitet haben, aber es tut nicht.

Ich habe auch die folgenden mit Wildcards (für Millionen) versucht, aber ich denke, ich muss etwas falsch machen.

UPDATE table_name SET column_name = REPLACE(column_name,'.%M','.%') 
WHERE column_name LIKE '%.%M' 
+0

Das funktioniert nicht für Tausende? Es sieht wirklich so aus, als müsste es. –

+0

Es gibt nur Tausende und Millionen, im Falle von Millionen multipliziert mit 1000 gefunden. –

Antwort

2

können Sie versuchen, die folgenden UPDATE Abfrage:

UPDATE yourTable 
SET col = CAST(CASE WHEN col LIKE '%k' THEN CAST(REPLACE(col, 'k', '') AS DECIMAL(10,2)) 
        WHEN col LIKE '%M' 
        THEN ROUND(1000*CAST(REPLACE(col, 'M', '') AS DECIMAL(10,2)), 2) 
       END AS CHAR) 
WHERE col LIKE '%k' OR col LIKE '%M' 

Demo hier:

SQLFiddle

+0

Ich habe vergessen, meine zu filtern, guten Fang. –

+0

@HartCO Wir haben beide immernoch Probleme ... jetzt reparieren –

+0

Warum 'CAST()' wenn es ein Stringfeld ist? –

1

Ihr k Update sieht aus wie es funktionieren sollte, können Sie es tun beides in einem CASE Ausdruck:

UPDATE table_name 
SET column_name = CASE WHEN column_name LIKE '%k%' THEN REPLACE(column_name, 'k', '') 
         WHEN column_name LIKE '%M%' THEN REPLACE(column_name,'M','')*1000 
        END 
WHERE column_name LIKE '%k%' OR column_name LIKE '%M%' 
+0

Ihre Abfrage scheint für MySQL ([Fiddle here] (http://sqlfiddle.com/#!9/fee9e/9)) einwandfrei zu funktionieren, würde aber auf anderen RDBMS wie SQL Server, die keine impliziten Typkonvertierungen unterstützen, fehlschlagen . –

+0

@TimBiegeleisen Wahr, ich vertraute dem mysql-Tag und machte mir darüber keine Sorgen, aber guter Punkt. –

+0

Upvoted für die einfachste Option bei der Verwendung von MySQL. –

Verwandte Themen