2009-09-09 77 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