sql >> Database teknologi >  >> RDS >> Mysql

Sortering/bestilling i MySQL

Du kan opdele dem i deres bestanddele som:

SELECT REPLACE(SUBSTRING(SUBSTRING_INDEX(prog_id, '.', 1), LENGTH(SUBSTRING_INDEX(prog_id, '.', 1 -1)) + 1), '.', '') AS id1, REPLACE(SUBSTRING(SUBSTRING_INDEX(prog_id, '.', 2), LENGTH(SUBSTRING_INDEX(prog_id, '.', 2 -1)) + 1), '.', '') AS id2, REPLACE(SUBSTRING(SUBSTRING_INDEX(prog_id, '.', 3), LENGTH(SUBSTRING_INDEX(prog_id, '.', 3 -1)) + 1), '.', '') AS id3 FROM programs ORDER BY CAST(id1 AS INT(4)), CAST(id2 AS INT(4)), CAST(id3 AS INT(4))

Den bedste metode ville være at oprette de ekstra felter, som yoda2k siger, men hvis du ikke har den adgang, kan du bruge ovenstående.

Du kan indkapsle det i en funktion som:

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');
 

Gør derefter:

SELECT SPLIT_STR(prog_id, '.', 1) AS id1,
   SPLIT_STR(prog_id, '.', 2) AS id2,
   SPLIT_STR(prog_id, '.', 3) AS id3,
FROM programs
ORDER BY CAST(id1 AS INT(4)), CAST(id2 AS INT(4)), CAST(id3 AS INT(4))
 


  1. oracle autoincrement med sekvens og trigger fungerer ikke korrekt

  2. Gem CSV-filer i mysql-databasen

  3. Markør forældelse Dump

  4. Pas på vildledende data fra SET STATISTICS IO