Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SQL phân tách hàng được phân tách bằng dấu phẩy

Bạn có thể làm điều đó với SQL thuần túy 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 ý: Mẹo là tận dụng bảng tally (số) và một hàm rất tiện dụng trong trường hợp này là hàm MySQL SUBSTRING_INDEX() . Nếu bạn thực hiện nhiều truy vấn như vậy (chia nhỏ) thì bạn có thể cân nhắc điền và sử dụng một bảng kiểm đếm liên tục thay vì tạo nó một cách nhanh chóng với một truy vấn con như trong ví dụ này. Truy vấn con 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 phân chia tối đa 100 giá trị được phân tách trên 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ó.

Đầu ra:

|          VALUE |
|----------------|
|     somethingA |
|     somethingB |
|     somethingC |
| somethingElseA |
| somethingElseB |

Đây là SQLFiddle bản demo

Đây là cách truy vấn có thể trông với một bảng kiểm đếm liên tục

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 bản demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FROM_UNIXTIME () Ví dụ - MySQL

  2. Truy xuất Hình ảnh được lưu trữ dưới dạng BLOB trên MYSQL DB

  3. Cài đặt MySQL

  4. NHÓM truy vấn MySQL THEO ngày / tháng / năm

  5. MySQL ADD COLUMN