2012-06-29 16 views
0

我有这列叫做code看起来像:1-100-ETC-601-100-ETC-201-100-ETC-70使用MySQL的ORDER BY子句中,是有可能为了通过某些字段和自定义为了

最后两个字符总是要开始或者6,2或7.

如果我按ORDER BY SUBSTRING(code,13)ASC或DESC进行排序,它们将按数字顺序排序。以为这不是我想要的(或客户想要的)。

正确的排序顺序应该是:6,然后2然后7

只是想知道这是否可能只通过使用SQL查询。

回答

3

你可以使用MySQL的FIELD()功能:

ORDER BY FIELD(SUBSTRING(code, 11, 1), '6', '2', '7') 
+1

你想添加“,SUBSTRING(code,12)”到那个以正确的顺序得到其余的代码,如果它包括60,61,62等,对吗? – Ghost

+0

@ user1428799:听起来对我很好。 – eggyal

+0

这就是我所做的。运作良好。谢谢。这个也比CASE方法稍短。 – 40Plot

1

使用case语句。

ORDER BY CASE WHEN SUBSTRING(code,11) = '6' THEN '1' + substring(code, 12) ELSE SUBSTRING(code,11) END 

应在6转换为一个用于与2并且在这种情况下,7排序

(子串是1索引在MySQL,所以它是11,而不是10)

+0

太棒了!谢谢..它的工作原理。我想知道这是否显着减慢了查询速度? – 40Plot

+0

我不能说mysql,但我知道在SQL服务器中它向执行计划添加了一个步骤。然而,它看起来并不像它影响太多,顺序仍然会占用更多的权力。您可以尝试使用Explain来运行这两个查询,并查看数据的结果。 – Ghost