我需要分组,例如说X列,而忽略括号内的内容

      X

aaabbbccc[0]aaabbbccc
aaabbbccc[15]aaabbbccc
aaabbbccc[11]eeefffggg
aaabbbccc[10]eeefffggg
aaabbbccc[17]aaabbbccc
aaabbbccc[19]eeefffggg


如,

      X

aaabbbccc[0]aaabbbccc
aaabbbccc[15]aaabbbccc
aaabbbccc[17]aaabbbccc
aaabbbccc[10]eeefffggg
aaabbbccc[11]eeefffggg
aaabbbccc[19]eeefffggg


但是,如果我使用ORDER BY或GROUP BY,则总会得到如下所示。

aaabbbccc[0]aaabbbccc
aaabbbccc[10]eeefffggg
aaabbbccc[11]eeefffggg
aaabbbccc[15]aaabbbccc
aaabbbccc[17]aaabbbccc
aaabbbccc[19]eeefffggg


谁能建议我如何克服这一困境。

谢谢。

最佳答案

您可以对派生值进行分组/排序,尽管这会阻止使用索引,因此在大型表上的性能将非常糟糕:

SELECT ...
...
GROUP BY CONCAT(
    LEFT(yourfield, LOCATE('[', yourfield)),
    RIGHT(yourfield, LENGTH(yourfield) - LOCATE(']', yourfield))
);


注意:只是从我的头顶上跳下来,所以这很可能行不通,但应该为您提供一个工作基础。假设它可以正常工作,它将字符串分为两部分-在[之前和]之后,将这两部分放在一起,然后分组,有效地消除了[...]部分。

如果您定期执行此类操作,那么我建议将该字段分为两个单独的字段,因此您可以使用专用/永久性的“ before”和“ after”字段进行索引和分组/排序,这比这种丑陋的怪兽更容易。

09-12 23:52