2009-09-09 72 views
10

当更新一个行时,我想有一个内置的检查来做一些边界检查。大多数语言都有一个MAX()函数来返回传递参数的最大值,但是MySQL似乎使用MAX()来表示其他值。例如:MySQL MAX()函数用于比较更新中的数值吗?

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

我想减去个人ID 1 20美元,但我不希望美元有史以来负值来表示,所以我希望有一个内置的比较0.这是否工作?还是有另一种方式?谢谢!

回答

35

MySQL支持一个名为GREATEST()的函数。它返回参数列表中的最大值。

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

这不是ANSI SQL中的标准函数,所以不要指望它在其他品牌的SQL数据库中可用。如果您需要独立于供应商的解决方案,请使用其他人建议的CASE语法。但是如果你只需要使用MySQL,这个函数就更加简洁。

+3

对应的MIN()函数被称为LEAST() – 2013-06-29 09:50:50