Trong khi bạn chắc chắn thể sử dụng chức năng lưu IF()
kiểm soát MySQL của as demonstrated by dbemerlin's answer, tôi nghi ngờ nó có thể là một chút rõ ràng hơn để người đọc (tức là chính mình, và bất kỳ nhà phát triển trong tương lai những người có thể nhận mã của bạn trong tương lai) sử dụng một CASE
biểu hiện thay vì:
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
Tất nhiên, trong ví dụ cụ thể này đó là một chút lãng phí để thiết lập A
cho chính nó trong ELSE
khoản-tốt hơn hoàn toàn để lọc điều kiện như vậy từ UPDATE
, thông qua mệnh đề 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)
(Sự bất bình đẳng đòi hỏi A IS NOT NULL
).
Hoặc, nếu bạn muốn các khoảng phải đóng cửa chứ không phải là mở (lưu ý rằng điều này sẽ thiết lập giá trị của 0
-1
-Nếu đó là mong muốn, người ta có thể lọc một cách rõ ràng những trường hợp như trong mệnh đề WHERE
, nếu không thêm một cao hơn ưu tiên WHEN
điều kiện):
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
Mặc dù, như dbmerlin cũng chỉ ra, đối với tình hình cụ thể này, bạn có thể xem xét sử dụng CEIL()
thay vì:
UPDATE Table SET A = CEIL(A) WHERE A BETWEEN 0 AND 2
Giá trị của A một chỉ là ví dụ. Tôi muốn áp dụng nó vào bất kỳ điều kiện nào. Ví dụ: NẾU KHÔNG IS NULL SET thành 'Một số giá trị Varchar' ELSE SET thành 'Một số giá trị Varchar khác'; Tôi sẽ đưa ra giải pháp của bạn một shot và xem nó hoạt động như thế nào. Cảm ơn rất nhiều! – ThinkCode
bạn có một refference những gì bạn đang làm? Tôi không thể nhìn thấy nó vào lúc này .. – inetphantom