如何订购包含双冒号的文本(::)

时间:2012-06-15 10:57:17

标签: mysql sql

按名称订购我正在使用'order by name'

但名称包含双冒号:'::'

如何按双冒号之后的文字订购?

所以:

aaaa::bbbb
aaaa::aaaa
aaaa::1234
aaaa::a1234

将被命令:

aaaa::1234
aaaa::aaaa
aaaa::a1234
aaaa::bbbb

5 个答案:

答案 0 :(得分:2)

按子串排序并使用locate查找它的起始位置:

order by substring(name, locate('::', name) + 3, 30)

由于不会使用任何索引,因此会降低性能。

答案 1 :(得分:0)

您必须在MySQL中创建一个新字段,然后将文本的第二部分插入其中。排序依据使用各种索引和算法(例如分而治之)。

因此它无法对特定字符串的特定部分进行排序,如果你设法“伪造”一种方法,那么由于缺乏性能,性能会非常糟糕索引

对不起,我意识到这可能不是你想要的答案,但我担心最好的方法是稍微长一点的方式,但至少你可以在快速点亮的情况下这样做,如果你添加一个索引它:)。

答案 2 :(得分:0)

您必须将文本拆分为两列,然后按后者排序。您可以拆分和连接应用程序代码中的列,也可以使用视图和存储过程使其看起来像数据库客户端的一列。

答案 3 :(得分:0)

您可以尝试以下方法

  1. 在::

    之后获取所有数据为Alphabet的记录

    UNION

  2. 获取所有记录,其中所有数据均为::

  3. 之后的数字

答案 4 :(得分:0)

关于你的排序,根据ascii值数字在字母表之前排在第一位, 所以aaaa:1234应该是第一个

您可以检索值并在PHP中排序

Navsort

<?php
$arr = array("aaaa::bbbb","aaaa::aaaa","aaaa::1234","aaaa::a1234");

$sec=$arr;
natsort($sec);

print_r ($sec);

?>