Bạn có thể làm điều đó với SQL tinh khiết như thế này
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')))
ORDER BY value
Lưu ý: Bí quyết là để tận dụng kiểm đếm (số) bảng và rất tiện dụng trong trường hợp này MySQL chức năng SUBSTRING_INDEX()
. Nếu bạn thực hiện rất nhiều truy vấn như vậy (tách) thì bạn có thể xem xét điền và sử dụng bảng kiểm đếm được duy trì thay vì tạo nó trên bay với truy vấn phụ như trong ví dụ này. Truy vấn phụ trong ví dụ này tạo ra một chuỗi các số từ 1 đến 100 một cách hiệu quả cho phép bạn chia tối đa 100 giá trị phân tách cho mỗi hàng trong bảng nguồn. Nếu bạn cần nhiều hơn hoặc ít hơn, bạn có thể dễ dàng điều chỉnh nó.
Output:
| VALUE |
|----------------|
| somethingA |
| somethingB |
| somethingC |
| somethingElseA |
| somethingElseB |
Đây là SQLFiddle bản demo
Đây là cách truy vấn có thể nhìn với một bảng tổng sắp tiếp tục tồn tại
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN tally n
WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')))
ORDER BY value
Đây là SQLFiddle demo
đã hỏi một lần gazillion trên SO: eghttp: //stackoverflow.com/questions/10581772/sql-server-2008-how-to-split-a-comma-separated-value-to-columns , http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-to-rows –
@MitchWheat - đó không phải là câu trả lời cho câu hỏi này. Chúng có một số giá trị được phân tách bằng dấu phẩy, tôi không. –
Bạn đang tìm kiếm một giải pháp SQL thuần túy, hoặc một giải pháp trong một số ngôn ngữ khác - như PHP chẳng hạn. –