これは醜いですが、機能します:
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を使用して、その末尾部分を取得します(逆方向に読み取り、先頭のドットまで
-
文字列を数値に変換するには、ゼロを追加します