sql >> Base de Datos >  >> RDS >> Mysql

MYSQL selecciona una parte de una cadena y ordena por esa parte

Le sugiero que consulte las Funciones de cadenas de MySQL y más específicamente el SUBSTRING_INDEX función. La razón por la que sugiero este sobre SUBSTRING se debe a que el número antes o después de la barra inclinada puede ser más de un solo número, lo que haría que la longitud de la primera y/o la segunda parte varíe.

Ejemplo:

SELECT   `info`,
         SUBSTRING_INDEX(`info`, '/', 1) AS `first_part`,
         SUBSTRING_INDEX(`info`, '/', -1) AS `second_part`
FROM     `table`
ORDER BY `first_part` ASC,
         `second_part` ASC;

Resultado:

Ejemplo adicional

En este ejemplo, estoy usando CAST para convertir la segunda parte en un entero sin signo en caso de que contenga caracteres adicionales, como símbolos o letras. En otras palabras, la segunda parte de "web-4/15". sería "15" y la segunda parte de "web-4/15****" también sería "15".

SELECT   `info`,
          SUBSTRING_INDEX(`info`, '/', 1) AS `first_part`,
          CAST(SUBSTRING_INDEX(`info`, '/', -1) AS UNSIGNED) `second_part`
FROM     `table`
ORDER BY `first_part` ASC,
         `second_part` ASC;