Chuyển đổi số tháng thành tên tháng trong chuỗi CSV với CASE và FIND_IN_SET
Kỹ thuật: Duyệt qua 12 tháng, dùng FIND_IN_SET kiểm tra sự hiện diện, CASE trả về tên tháng, CONCAT gộp chuỗi.
Tạo bảng và dữ liệu
mysql> create table DemoTable1629 ( Month varchar(100) ); Query OK, 0 rows affected (0.64 sec)
mysql> insert into DemoTable1629 values('2,4,6');
mysql> insert into DemoTable1629 values('1,3,5,12');
mysql> insert into DemoTable1629 values('7,8,9,10');
Truy vấn chuyển đổi (rút gọn hiển thị)
mysql> select trim(trailing ',' from concat(
CASE WHEN FIND_IN_SET(1, Month) THEN 'January,' ELSE '' END,
CASE WHEN FIND_IN_SET(2, Month) THEN 'February,' ELSE '' END,
-- ... tiếp tục cho tháng 3 đến 12
CASE WHEN FIND_IN_SET(12,Month) THEN 'December,' ELSE '' END
)) from DemoTable1629;
Kết quả
+------------------------------------------------------------------+ | Feburary,April,June | | January,March,May,December | | July,August,September,October | +------------------------------------------------------------------+
Giải thích:
FIND_IN_SET(2, '2,4,6')→ 1 (tìm thấy) → trả về 'February,'CONCATnối tất cả kết quả CASETRIM(TRAILING ',' ...)xóa dấu phẩy thừa ở cuối
⚠️ Cảnh báo: Cách này cồng kềnh, khó bảo trì. Thiết kế tốt hơn: Tách bảng tháng riêng, dùng JOIN. Hoặc lưu JSON array và dùng JSON_TABLE (MySQL 8.0+).
Sửa lỗi chính tả: 'Feburary' → 'February', 'Marh' → 'March' trong code gốc.