在MySQL中使用嵌套case语句

在MySQL中使用嵌套case语句,mysql,Mysql,我有这样一个问题: UPDATE image SET angle = CASE WHEN id = 1000 THEN 90 ELSE angle END WHERE id IN(1000) 正如您可能已经猜到的,此SQL是动态构建的,以便使用单个语句可以更新多个记录。我想要的是,我希望它是增量的,而不是像本例中的90那样直接更新一个值。所以我想我能做到: UPDATE image SET angle = CASE WHEN id = 1000 THEN angle

我有这样一个问题:

UPDATE image
SET angle  = CASE  
WHEN id = 1000 
THEN 90  
ELSE 
angle 
END WHERE 
id IN(1000) 
正如您可能已经猜到的,此SQL是动态构建的,以便使用单个语句可以更新多个记录。我想要的是,我希望它是增量的,而不是像本例中的90那样直接更新一个值。所以我想我能做到:

UPDATE image
SET angle  = CASE  
WHEN id = 1000 
THEN angle + 90    //<-- instead of 90, I use (angle + 90)
ELSE 
angle 
END WHERE 
id IN(1000) 
更新图像
设置角度=大小写
当id=1000时

然后角度+90/=360,然后我希望角度字段为0。我不知道如何编辑SQL语法来实现这一点。非常感谢您的指点

您可以使用模数运算符(
%
)。每当表达式
角度+90
超过360度时,它将返回到零

UPDATE image
SET angle = CASE  
    WHEN id = 1000 
THEN (angle + 90) % 360
ELSE angle 
END
WHERE id IN(1000)

您确实可以执行嵌套的
CASE
语句

UPDATE image
SET angle  = CASE  
WHEN id = 1000 
THEN 
    CASE WHEN angle >= 270 
    THEN 0
    ELSE angle + 90    //<-- instead of 90, I use (angle + 90)
    END
ELSE 
    angle 
END WHERE 
id IN(1000) 
更新图像
设置角度=大小写
当id=1000时
然后
角度>=270时的情况
然后0

ELSE angle+90//是否要将
angle+90
的任何值设置为
0
,或者是否要环绕并从
0
递增?是的,它会。真的,我们不知道他的确切要求是什么。我打赌他想要这个模数。让我们看看会发生什么,我很兴奋。是的,一旦我重新阅读了你上面的评论,我就明白了你的意思,你是正确的;这就是为什么我删除了我的评论。我阅读了原始请求“anythings>=360应该是0”,因此我根据该请求进行了回答。