我有一个带有列的表unsigned int
,让我们将其命名为 col1。
我想将列递减一个数字,如果递减后的值小于 1,则将其设置为 1。像这样:
UPDATE `tbl1` SET `col1` = GREATEST(1, `col1`-3);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果 col1 是 0 或 1 或 2 并且我尝试做 -3 然后 MySQL 抛出错误。
您可以使用case
子句
update tbl1 set col1 = (case when col1 <= 3 then 1 else (col1 - 3) end);
Run Code Online (Sandbox Code Playgroud)
正如@RDFozz 所描述的:
使用 OP 列出的代码,必须计算 col1 - 3,并且由于它是无符号整数,因此结果必须是无符号整数。除非结果实际上是无符号整数,否则此代码可防止计算发生。
更新 :
@kondybas 建议的另一种可能方式
update tbl1 set col1 = IF(col1<=3, 1, col1-3);
Run Code Online (Sandbox Code Playgroud)