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