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

Div*_*ero 9 mysql sql

更新行时,我希望有一个内置的检查来进行一些边界检查.大多数语言都有一个MAX()函数来返回传递的参数的最大值,但MySQL似乎使用MAX()来做其他事情.例如:

UPDATE person SET dollars = MAX(0, dollars-20) WHERE id=1
Run Code Online (Sandbox Code Playgroud)

我想从人id 1减去20美元,但我不希望美元永远用负值表示,所以我希望与0进行内置比较.这有用吗?或者还有另一种方式吗?谢谢!

Bil*_*win 34

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

UPDATE person SET dollars = GREATEST(0, dollars-20) WHERE id=1
Run Code Online (Sandbox Code Playgroud)

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

  • 相应的`MIN()`函数称为`LEAST()` (3认同)