Kỹ thuật: Nhân -1 trong SELECT ... INSERT
INSERT INTO bang_moi (cot1, cot_am) SELECT cot1, (-1 * cot_goc) FROM bang_goc;
Ví dụ hoàn chỉnh
Bảng nguồn (giá trị dương)
+--------+-------+ | UserId | Value | +--------+-------+ | 1 | 10 | | 3 | 598 | | 5 | 786 | | 7 | 189 | | 9 | 345 | +--------+-------+
Tạo bảng đích và INSERT chuyển đổi
mysql> CREATE TABLE PositiveToNegativeValueDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Money INT
);
mysql> INSERT INTO PositiveToNegativeValueDemo(Id, Money)
-> SELECT UserId, (-1 * Value) FROM recordsDemo;
Kết quả
+------+-------+ | Id | Money | +------+-------+ | 1 | -10 | | 3 | -598 | | 5 | -786 | | 7 | -189 | | 9 | -345 | +------+-------+
Các biến thể
- Đổi dấu (giữ giá trị tuyệt đối):
-1 * cothoặc0 - cot - Chỉ chuyển dương thành âm (giữ âm nguyên vẹn):
CASE WHEN cot > 0 THEN -cot ELSE cot END - Chuyển âm thành dương:
ABS(cot)
Ứng dụng thực tế
- Kế toán: Ghi nợ (debit) là dương, có (credit) là âm
- Chuyển đổi đơn vị: Celsius ↔ Fahrenheit offset
- Game: Sát thương (dương) ↔ Hồi máu (âm)
Lưu ý: Kiểu dữ liệu cột đích phải đủ lớn (INT, BIGINT, DECIMAL) để chứa giá trị âm.