2012-04-19 14 views
57

Ben postgres için biraz yeniyim. Postgres tablosundaki bir alanda bir değer (tamsayı) almak ve bunu birer birer arttırmak istiyorum. Örneğin, 'toplamlar' tablosunda 'sütun' ve 'toplam' olmak üzere 2 sütun varsa ve Bill toplamda 203 olsaydı, Bill'in toplamını 204'e taşımak için kullanacağım SQL ifadesi ne olurdu?Postgres'te bir değer artışı

cevap

116
UPDATE totals 
    SET total = total + 1 
WHERE name = 'bill'; 

sen de başka bir koşul ekleyebiliriz akım değeri gerçekten 203 emin (ve kazara tekrar artırmaz) olmak için:

UPDATE totals 
    SET total = total + 1 
WHERE name = 'bill' 
    AND total = 203; 
+0

ben ** olmayan tamsayı artırmak için çalışıyordu ** datatype ve alma: 'HATA: işleç mevcut değil: karakterde değişen + tam sayı HAT 2: SET toplam = toplam + 1 ' Değeri, bu gibi tamsayıya dönüştürerek çözüldü SET total = total :: int + 1 –

+19

@ Stew-au: Varchar sütunlarındaki numaraları saklamayın ***. Bu uzun vadede size sorun verecektir. Bir tamsayı (veya bigint veya uygun olanı) kullanın, ancak bir karakter veri türü kullanmayın. –

+2

Bu ifade atomik midir yoksa kötümser desteğe ihtiyacım var mı? (Benim toplam sayım ile toplam + 1 için toplam alma arasında, korkum şu ki tabloya bir miktar yazı yazılmıştır.) – miho