Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - sortuj ciąg znaków oddzielonych przecinkami w kolumnie

Jest to możliwe, ale niezbyt dobry pomysł.

Na przykład możesz podzielić listę oddzieloną przecinkami, generując zakres liczb i używając tego z SUBSTRING_INDEX, aby uzyskać każdy element. Jednak zakres liczb musi być tak duży, jak maksymalna liczba wartości rozdzielonych.

Następnie możesz użyć GROUP_CONCAT, aby ponownie połączyć listę we właściwej kolejności. Zwróć uwagę, że kolejność będzie się różnić w zależności od tego, czy rozdzieliłeś wartości jako liczby/całkowite, czy pozostawiłeś je jako ciągi.

SELECT id, title, GROUP_CONCAT(aNumber ORDER BY aNumber)
FROM
(
    SELECT id, title, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', tens.acnt * 10 + units.acnt + 1), ',', -1) AS UNSIGNED) AS aNumber
    FROM some_table
    CROSS JOIN
    (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
    CROSS JOIN
    (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
    WHERE LENGTH(numbers) - LENGTH(REPLACE(numbers, ',', '')) >= tens.acnt * 10 + units.acnt
) sub0
GROUP BY id, title;

Zademonstrowano tutaj na skrzypcach SQL (jeśli skrzypce SQL postanowią działać):-

http://www.sqlfiddle.com/#!9/c9703ee/4

Pierwszy wybór to rzutowanie wartości jako liczb całkowitych w celu ich posortowania liczbowego, drugi nie rzutuje ich, ale po prostu pozostawia je jako łańcuchy, stąd kolejność sortowania jest inna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Losowy KLUCZ PODSTAWOWY dla Innodb

  2. Node.js synchronicznie zapętla się lub iteruje po asynchronicznych instrukcjach

  3. Połącz pola z różnych rzędów pod warunkiem

  4. Przyznaj MySQL uprawnienia do tabel i kolumn

  5. Suma sum dwóch zapytań