Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL รวมค่าคอลัมน์ที่มี Currency Sign (€) ด้วย REPLACE และ SUM

ทำความสะอาดข้อมูลก่อน Aggregate: ลบ Currency Symbol

เมื่อคอลัมน์เก็บราคาเป็น String ที่มี Currency Sign (€, $, ฿, USD) ต้องลบ Sign ออกก่อนจึงจะ SUM ได้

ตัวอย่าง

CREATE TABLE DemoTable616 (Price VARCHAR(100));

INSERT INTO DemoTable616 VALUES
('€200.00'), ('€300.00'), ('€500.00');

Query: ลบ € แล้ว SUM

SELECT SUM(REPLACE(Price, '€', '')) AS Total_Price
FROM DemoTable616;

ผลลัพธ์: 1000

REPLACE Function

REPLACE(str, from_str, to_str)
-- แทนที่ from_str ทุกที่ใน str ด้วย to_str

กรณีซับซ้อน: หลาย Currency, Comma, Space

-- ข้อมูล: '$1,234.56', '€ 99.00', 'THB 1,500', 'USD 2500.00'
SELECT SUM(
    CAST(
        REPLACE(
            REPLACE(
                REPLACE(REPLACE(Price, '$', ''), '€', ''), 
                'THB', ''), 
            ',', ''
        ) AS DECIMAL(15,2)
    )
) AS total_usd
FROM prices;

Best Practice: แยก Column

DesignColumnsข้อดี
BadPrice VARCHAR('€200.00')Query ซับซ้อน, Slow, Error-prone
GoodAmount DECIMAL(10,2), Currency CHAR(3)Index ได้, คำนวณเร็ว, Standard
BetterAmount_cents BIGINT, Currency CHAR(3)No Floating Point Error, เร็วที่สุด

MySQL 8.0: Generated Column สำหรับ Clean Value

ALTER TABLE DemoTable616
ADD COLUMN Price_Clean DECIMAL(10,2) 
GENERATED ALWAYS AS (CAST(REPLACE(Price, '€', '') AS DECIMAL(10,2))) STORED,
ADD INDEX idx_price_clean (Price_Clean);

-- แล้ว Query เร็ว:
SELECT SUM(Price_Clean) FROM DemoTable616;

Currency Formatting สำหรับแสดงผล

-- Format เป็น Currency String
SELECT CONCAT('€', FORMAT(SUM(REPLACE(Price, '€', '')), 2)) AS formatted_total
FROM DemoTable616;
-- ผล: €1,000.00

-- ใช้ FORMAT() พร้อม Locale (MySQL 8.0+)
SELECT FORMAT(1000, 2, 'de_DE');  -- 1.000,00 (German)