title、name、sizeなどの 3 つのフィールドがあり、 文字列列 (数値を含む) を並べ替えようとしています。
+-----------------+--------------+-------------------+
+----- title -----+---- name ----+-------size--------+
+-----------------+--------------+-------------------+
+ SPR-235 + SPR 235 + 118 x 118 x 43 mm +
+ SPR-355-D + SPR 355 D + 140 x 140 x 41 mm +
+ SPR-355-K + SPR 355 K + 140 x 140 x 41 mm +
+ SPR-415 + SPR 415 + 155 x 155 x 50 mm +
+ SPR-455-K + SPR 455 K + 138 x 138 x 64 mm +
+ SPR-455-D + SPR 455 D + 138 x 138 x 64 mm +
+ SPR-135 + SPR 135 + 60 x 60 x 82 mm +
私はこのクエリを使用しました:
SELECT title,name FROM table ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED)
次のようにうまく動作します:
+-----------------+--------------+
+----- title -----+---- name ----+
+-----------------+--------------+
+ SPR-135 + SPR 135 +
+ SPR-235 + SPR 235 +
+ SPR-355-D + SPR 355 D + <-- see
+ SPR-355-K + SPR 355 K + <-- see
+ SPR-415 + SPR 415 +
+ SPR-455-D + SPR 455 D + <-- see
+ SPR-455-K + SPR 455 K + <-- see
しかし、クエリを次のように変更すると:
SELECT * FROM テーブル ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED)
残念ながら、「D」と「K」はソートできませんでした。そして、次のように示します。
+-----------------+--------------+-------------------+
+----- title -----+---- name ----+-------size--------+
+-----------------+--------------+-------------------+
+ SPR-135 + SPR 135 + 60 x 60 x 82 mm +
+ SPR-235 + SPR 235 + 118 x 118 x 43 mm +
+ SPR-355-D + SPR 355 D + 140 x 140 x 41 mm + <-- see
+ SPR-355-K + SPR 355 K + 140 x 140 x 41 mm + <-- see
+ SPR-415 + SPR 415 + 155 x 155 x 50 mm +
+ SPR-455-K + SPR 455 K + 138 x 138 x 64 mm + <-- see
+ SPR-455-D + SPR 455 D + 138 x 138 x 64 mm + <-- see
「D」を最初に、次に「K」をソートしたい。この問題を助けてくれてありがとう:)