2009-09-09 2 views
10

Wenn ich eine Zeile aktualisiere, möchte ich eine eingebaute Überprüfung haben, um einige Grenzen zu prüfen. Die meisten Sprachen haben eine MAX() -Funktion, um das Maximum der übergebenen Argumente zurückzugeben, aber MySQL scheint MAX() für etwas anderes zu verwenden. Zum Beispiel:MySQL MAX() -Funktion, um numerische Werte in einem Update zu vergleichen?

UPDATE person SET dollars = MAX(0, dollars-20) WHERE id=1 

Ich möchte 20 Dollar von Person-ID 1, subtrahieren, aber ich will nicht Dollar je durch einen negativen Wert dargestellt werden, so will ich einen eingebauten im Vergleich zu 0. Ist diese Arbeit? Oder gibt es einen anderen Weg? Vielen Dank!

Antwort

35

MySQL unterstützt eine Funktion namens GREATEST(). Er gibt den größten Wert aus einer Liste seiner Argumente zurück.

UPDATE person SET dollars = GREATEST(0, dollars-20) WHERE id=1 

Dies ist keine Standardfunktion in ANSI SQL, zählt also nicht auf sie in anderen Marken von SQL-Datenbank zur Verfügung stehen. Wenn Sie eine herstellerunabhängige Lösung benötigen, verwenden Sie die von anderen vorgeschlagene Syntax CASE. Wenn Sie jedoch nur MySQL verwenden müssen, ist diese Funktion präziser.

+3

Die entsprechende 'MIN()' Funktion heißt 'LEAST()' –

Verwandte Themen