我有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 table ORDER BY CAST(SUBSTRING(名称,LOCATE('',名称)+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”。 非常感谢帮助解决这个问题:)
答案 0 :(得分:2)
获取数字部分,然后从字符串中获取最后一个字符,并且两个顺序的顺序应该有效。
SELECT name
FROM myTable
ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED),
SUBSTRING(name,-1);
答案 1 :(得分:-1)
通过在字符9中包含子字符串(如果存在),为您的订单添加另一个子句。
ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED),
SUBSTRING(name,9,1)