如何在SQL中实现`set field = max(1,x)`?

时间:2011-08-24 18:31:58

标签: sql postgresql

我正在尝试使用表达式更新一系列记录中的字段,该表达式将计算为可能为负数的整数。我希望列的下限为1;表达式求值小于1的任何行都应将其字段设置为1.最好用以下伪SQL语句对表示:

update posts set field = [expensive expression];
update posts set field = 1 where field < 1;

如何在单个SQL update语句中实现此功能?在PostgreSQL中是否有一些等同于max(a, b),我可以传递给max([expression], 1)

3 个答案:

答案 0 :(得分:6)

使用功能GREATEST

或者,更为一般的条件方法:

SELECT 
     CASE WHEN condition 
     THEN valueForTrue
     ELSE valueForFalse
     END
FROM ...

答案 1 :(得分:2)

是的,请使用GREATEST([expensive expr], 1)

答案 2 :(得分:1)