虽然你肯定可以使用MySQL的IF()
控制流功能as demonstrated by dbemerlin's answer,我怀疑这可能是一个更清晰一点的读者(即自己和未来的任何开发谁可以拿起您在未来的代码)使用CASE
表达式代替:
UPDATE Table
SET A = CASE
WHEN A > 0 AND A < 1 THEN 1
WHEN A > 1 AND A < 2 THEN 2
ELSE A
END
WHERE A IS NOT NULL
当然,在该特定示例中它是一个小的浪费设置A
到本身在ELSE
子句更好完全过滤从UPDATE
这样的条件下,经由WHERE
子句:
UPDATE Table
SET A = CASE
WHEN A > 0 AND A < 1 THEN 1
WHEN A > 1 AND A < 2 THEN 2
END
WHERE (A > 0 AND A < 1) OR (A > 1 AND A < 2)
(不等式需要A IS NOT NULL
)。
或者,如果你想要的时间间隔被关闭,而不是开(注意 - 如果这是不可取的,这将设置0
值1
,该WHERE
子句中人们可以明确地筛选这样的情况下,否则增加一个更高优先WHEN
条件):
UPDATE Table
SET A = CASE
WHEN A BETWEEN 0 AND 1 THEN 1
WHEN A BETWEEN 1 AND 2 THEN 2
END
WHERE A BETWEEN 0 AND 2
虽然,作为dbmerlin还指出,对于这种特定情况下,你可以考虑使用替代CEIL()
:A中的
UPDATE Table SET A = CEIL(A) WHERE A BETWEEN 0 AND 2
值只是举例。我想将它应用于任何条件。例如:如果一个IS NOT NULL SET设置为'Some Varchar Value'ELSE SET设置为'Some Other Varchar Value';我会给你的解决方案一个镜头,看看它是如何工作的。非常感谢! – ThinkCode 2010-02-01 15:58:49
你有没有参考你在做什么?我目前看不到它.. – inetphantom 2015-04-01 09:45:28