sql >> Databáze >  >> RDS >> Mysql

Řazení/řazení v MySQL

Můžete je rozdělit na jednotlivé části jako:

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))

Nejlepší metodou by bylo vytvořit přídavná pole, jak říká yoda2k, ale pokud tento přístup nemáte, můžete použít výše uvedené.

Můžete to zapouzdřit do funkce jako:

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, '');

Pak proveďte:

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. Jak fungují pohledy MySQL?

  2. Řádek shody Mysql EAV jako hodnota vlastnosti pole nebo entity

  3. Chyba LOAD DATA INFILE 1064

  4. Poskytovatel ADO.NET s neměnným názvem 'MySql.Data.MySqlClient' buď není registrován v konfiguračním souboru počítače nebo aplikace.