我需要分组,例如说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”字段进行索引和分组/排序,这比这种丑陋的怪兽更容易。