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. PHPとMySQLの日付形式の違いの管理

    2. MSSQLからMySQLへのデータのインポート

    3. SQLite JSON_PATCH()

    4. Javaを使用してMySQLからBLOBを読み取る