一尘不染

MySQL MAX()函数比较更新中的数值?

sql

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

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

我想从人员ID 1减去20美元,但我不希望美元一直用负值表示,所以我想与0进行内置比较。这行得通吗?还是有另一种方法?谢谢!


阅读 246

收藏
2021-05-16

共1个答案

一尘不染

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

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

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

2021-05-16