Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zahlen aus einer *varchar*-Zelle extrahieren und mit ihnen in reinem MySQL rechnen

Es kann sicherlich gemacht werden, aber SQL ist um das Axiom atomarer Werte herum entworfen (d. h. erste Normalform ). Das Teilen eines Feldes ist fast nie notwendig. In einer gut gestalteten Datenbank müssen Sie es ungefähr nur mit Datumsangaben verwenden, bei denen Sie möglicherweise nur mit dem Monat oder Jahr eines Datumsfelds arbeiten möchten. Während Sie sicherlich Datenbanken finden werden, die irgendein Idiot entworfen hat und mit denen Sie gezwungen sind, zu arbeiten, die gegen dieses Kernkonzept verstoßen, ist es eine schlechte Idee, damit anzufangen, herauszufinden, wie man mit diesen Designs arbeitet.

Außerdem lässt mich Ihr letzter Schritt "in dieser Zelle 239 speichern" glauben, dass Sie immer noch Datenbanken betrachten, als wären sie Tabellenkalkulationen. Sie sind nicht. Eine weitere Kernkomponente einer Datenbank ist, dass die Reihenfolge der Zeilen nicht wichtig ist. Felder hingegen beziehen sich immer auf andere Felder in derselben Zeile. Sie können den Wert eines der Felder auf etwas setzen, bei dem das ID-Feld dieses Datensatzes 239 ist, aber Sie werden sich im Allgemeinen nie darum kümmern, dass ein Datensatz der 239. ist.

Das heißt, hier ist eine Abfrage, die das tut, was Sie wollen:

Annahme:Das Format des Feldes ist "11a22 b". Das heißt, eine zweistellige Zahl, gefolgt von einem Buchstaben, gefolgt von einer weiteren zweistelligen Zahl, möglicherweise gefolgt von einem Leerzeichen und dem Buchstaben „b“.

SELECT CAST(SUBSTRING(Value,1,2) AS INT) 
    * CAST(SUBSTRING(Value,3,2) AS INT) 
    + CASE RIGHT(Value,1) WHEN 'b' THEN -1 ELSE 0 END
FROM MyTable