Mysql
 sql >> база данни >  >> RDS >> Mysql

Сортирайте десетичната запетая в PHP или MySQL

Това е грозно, но ще работи:

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

За да тествате тези изрази, можете да ги използвате в SELECT и да проверите, че извличат правилните компоненти и са подредени правилно:

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

Вместо да обяснявам как работи това, просто ще уцеля важните „трикове“

  • добавете завършващ "." в края на колоната, имате нужда от това, за да не се върнете на последната позиция няколко пъти,

  • използвайте SUBSTRING_INDEX, за да извлечете част до n-ти '.'

  • използвайте SUBSTRING_INDEX, за да извлечете последната част от това (четене назад, до водещата точка

  • добавете нула, за да преобразувате низа в числова стойност



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Замяна на символа в колони

  2. Идентификатор на ресурс #4 PHP MYSQL

  3. Направете няколко входа в таблицата на mysql наведнъж с един бутон за изпращане

  4. Как да проверите (или дори да зададете) съпоставяне в mdb (ms access) файл?

  5. Търся еквивалента на dictcursor в flaskext.mysql