Функция MySQL MAX() для сравнения числовых значений в обновлении?
При обновлении строки я хочу иметь встроенную проверку для проверки некоторых границ. Большинство языков имеют функцию MAX(), чтобы вернуть максимум переданных аргументов, но MySQL, похоже, использует MAX() для чего-то другого. Например:
UPDATE person SET dollars = MAX(0, dollars-20) WHERE id=1
Я хочу вычесть 20 долларов от человека id 1, но я не хочу, чтобы доллары когда-либо были представлены отрицательным значением, поэтому я хочу иметь встроенное сравнение с 0. Это работает? Или есть другой способ? Спасибо!
Ответы
Ответ 1
MySQL поддерживает функцию GREATEST()
. Он возвращает наибольшее значение среди списка своих аргументов.
UPDATE person SET dollars = GREATEST(0, dollars-20) WHERE id=1
Это не стандартная функция в ANSI SQL, поэтому не рассчитывайте на ее доступность в других базах данных SQL. Если вам требуется независимое от поставщика решение, используйте синтаксис CASE
, предложенный другими. Но если все, что вам нужно использовать, это MySQL, эта функция более кратка.