当更新一行时,我想要一个内置的检查来做一些边界检查。大多数语言都有MAX()函数来返回传递的最大参数,但是MySQL似乎将MAX()用于其他目的。例如:
UPDATE person SET dollars = MAX(0, dollars-20) WHERE id=1
我想从人员ID 1减去20美元,但我不希望美元一直用负值表示,所以我想与0进行内置比较。这行得通吗?还是有另一种方法?谢谢!
MySQL支持一个称为的函数GREATEST()。它返回其参数列表中的最大值。
GREATEST()
UPDATE person SET dollars = GREATEST(0, dollars-20) WHERE id=1
这不是ANSI SQL中的标准功能,因此不要指望它可以在其他品牌的SQL数据库中使用。如果需要独立于供应商的解决方案,请使用CASE其他人建议的语法。但是,如果您只需要使用MySQL,则此功能更为简洁。
CASE