2009-09-09 8 views
10

Podczas aktualizacji wiersza chcę mieć wbudowaną kontrolę, aby wykonać pewne sprawdzanie ograniczeń. Większość języków ma funkcję MAX(), która zwraca maksymalną liczbę przekazanych argumentów, ale wydaje się, że MySQL używa MAX() do czegoś innego. Na przykład:Funkcja MySQL MAX() do porównywania wartości numerycznych w aktualizacji?

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

Chcę odjąć 20 dolarów od osoby id 1, ale nie chcę, aby kiedykolwiek dolarów być reprezentowany przez wartość ujemną, więc chcę wbudowany w porównaniu z 0. Czy ten praca? A może jest inny sposób? Dzięki!

Odpowiedz

35

MySQL obsługuje funkcję o nazwie GREATEST(). Zwraca największą wartość z listy swoich argumentów.

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

To nie jest standardowa funkcja w ANSI SQL, więc nie licz na to, że będzie dostępna w bazie danych innych marek SQL. Jeśli potrzebujesz rozwiązania niezależnego od dostawcy, użyj składni sugerowanej przez innych. Ale jeśli wszystko, czego potrzebujesz, to MySQL, ta funkcja jest bardziej zwięzła.

+3

Odpowiadająca funkcja 'MIN()' jest nazywana 'LEAST()' –