Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xuất kết quả MySQL ra định dạng CSV trên màn hình (CONCAT)

Tạo CSV output trực tiếp với CONCAT()

Dùng CONCAT(cot1, ',', cot2, ',', cot3) để nối các cột thành chuỗi CSV. Khác với CONCAT_WS(), CONCAT() trả về NULL nếu bất kỳ cột nào NULL.

Cú pháp

SELECT CONCAT(cot1, ',', cot2, ',', cot3) AS CSVFormat
FROM tenBang;

Ví dụ (trùng dữ liệu bài CONCAT_WS)

Bảng CSVFormatOutputs:

CREATE TABLE CSVFormatOutputs (
    StudentId INT NOT NULL AUTO_INCREMENT,
    StudentName VARCHAR(20), StudentAge INT,
    PRIMARY KEY (StudentId)
);
INSERT INTO CSVFormatOutputs (StudentName, StudentAge) VALUES
('Mike',23), ('John',26), ('Sam',19), ('Carol',27), ('Bob',24);

Xuất CSV:

SELECT CONCAT(StudentId, ',', StudentName, ',', StudentAge) AS CSVFormat
FROM CSVFormatOutputs;

Kết quả

+------------+
| CSVFormat  |
+------------+
| 1,Mike,23  |
| 2,John,26  |
| 3,Sam,19   |
| 4,Carol,27 |
| 5,Bob,24   |
+------------+

⚠️ Vấn đề NULL với CONCAT

SELECT CONCAT('a', ',', NULL, ',', 'c'); -- Kết quả: NULL (toàn bộ)

Giải pháp: Dùng COALESCE(cot, '') hoặc chuyển sang CONCAT_WS().

Xuất CSV chuẩn (có header, escape) - KHUYẾN NGHỊ

Không nên tự xây CSV bằng CONCAT cho production. Dùng:

-- 1. INTO OUTFILE (server-side, cần quyền FILE)
SELECT * FROM bang INTO OUTFILE '/var/lib/mysql-files/out.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n';

-- 2. mysql command line (client-side)
mysql -u user -p -e "SELECT * FROM bang" --batch --raw database | sed 's/\t/,/g' > out.csv

-- 3. Python script (csv module) - linh hoạt nhất

Khi nào dùng CONCAT/CSVFormat

  • Debug nhanh, ad-hoc, dữ liệu nhỏ, không có NULL, không chứa dấu phẩy/ngoặc trong dữ liệu.
  • Copy-paste vào Excel/Text editor.