2009-09-09 24 views
10

Bir satırı güncelleştirirken, bazı sınır denetimi yapmak için yerleşik bir kontrol yapmak istiyorum. Çoğu dil, iletilen argümanların maksimumlarını döndürmek için MAX() işlevine sahiptir, ancak MySQL başka bir şey için MAX() kullanır. Örneğin:Bir güncellemede sayısal değerleri karşılaştırmak için MySQL MAX() işlevi?

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

Ben kişi id 1 den 20 dolar çıkarmak istiyorum, ama dolar hiç bir negatif değer tarafından temsil edilecek istemiyoruz, bu yüzden istiyorum yerleşik bir karşılaştırma 0. ile bu mu iş? Ya da başka bir yol var mı? Teşekkürler!

cevap

35

MySQL, GREATEST() adlı bir işlevi desteklemektedir. Argüman listesinin en büyük değerini döndürür.

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

Bu ANSI SQL standart bir işlev değildir, bu nedenle SQL veritabanının diğer markalar mevcut olmaya sayılmaz. Bir satıcıdan bağımsız bir çözüme ihtiyacınız varsa, başkaları tarafından önerilen CASE sözdizimini kullanın. Ama kullanmanız gereken tek şey MySQL ise, bu işlev daha özlü.

+3

Sorumlu 'MIN()' işlevi 'LEAST()' olarak adlandırılır –

İlgili konular