Xuất định dạng CSV trực tiếp từ MySQL với CONCAT_WS()
CONCAT_WS(separator, cot1, cot2, ...) = Concatenate With Separator. Tự động bỏ qua NULL, rất tiện tạo CSV.
Cú pháp
SELECT CONCAT_WS(',', cot1, cot2, cot3) AS CSVFormat
FROM tenBang;
Ví dụ minh họa
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_WS(',', 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 |
+------------+
So sánh CONCAT vs CONCAT_WS
| Hàm | Xử lý NULL | Ví dụ |
|---|---|---|
| CONCAT(',', a, b) | NULL → kết quả NULL | NULL |
| CONCAT_WS(',', a, b) | Bỏ qua NULL | 'a,b' (nếu a,b không NULL) |
Xuất CSV hoàn chỉnh (có header, escape quote)
MySQL thuần không có export CSV built-in. Các cách:
- SELECT ... INTO OUTFILE (cần quyền FILE, ghi file server):
SELECT * FROM bang INTO OUTFILE '/tmp/out.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; - Client tool: MySQL Workbench, DBeaver, HeidiSQL → Export CSV.
- Command line:
mysql -e "SELECT ..." --batch --raw | sed 's/\t/,/g' > out.csv.
Lưu ý
- CONCAT_WS chỉ dùng cho hiển thị/ad-hoc, không thay thế export chính thức.
- Dữ liệu chứa dấu phẩy/ngoặc kép → cần escape thủ công hoặc dùng INTO OUTFILE.