雖然你肯定可以使用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