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

Sorter decimal i PHP eller MySQL

Det er grimt, men det vil virke:

ORDER
   BY SUBSTRING_INDEX(CONCAT( col ,'.'),'.',1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',2),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',3),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',4),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',5),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',6),'.',-1) + 0
    , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',7),'.',-1) + 0
 

For at teste disse udtryk kan du bruge dem i en SELECT og kontrollere, at de uddrager de rigtige komponenter, og at de er ordnet korrekt:

SELECT col , SUBSTRING_INDEX(CONCAT( col ,'.'),'.',1) + 0 AS p1 , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',2),'.',-1) + 0 AS p2 , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',3),'.',-1) + 0 AS p3 , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',4),'.',-1) + 0 AS p4 , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',5),'.',-1) + 0 AS p5 , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',6),'.',-1) + 0 AS p6 , SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( col ,'.'),'.',7),'.',-1) + 0 AS p7 FROM mytable ORDER BY 2,3,4,5,6,7,8

I stedet for at forklare, hvordan dette virker, vil jeg bare trykke på de vigtige "tricks"

  • tilføj et efterfølgende "." i slutningen af ​​col, du har brug for det, så du ikke kommer tilbage til den sidste position flere gange,

  • brug SUBSTRING_INDEX til at hente del op til n'te '.'

  • brug SUBSTRING_INDEX til at hente den efterfølgende del af det (læser baglæns til den førende prik

  • tilføj nul for at konvertere strengen til en numerisk værdi



  1. kan ikke gemme flere borde i cakephp

  2. COUNT i en forespørgsel med flere JOINS og en GRUPPE EFTER KLAUSUL

  3. Sådan listes alle brugere i PostgreSQL

  4. Vinkelfejl - ReferenceError:$modal er ikke defineret