我尝试对我的一个包含MySQL中字母数字数据的列进行排序。数据以字符开头,以数字结尾。
以下是我的示例数据集:
insert into test_sort (port) values ('GI 1/0/1');
insert into test_sort (port) values ('GI 1/0/4');
insert into test_sort (port) values ('GI 1/0/10');
insert into test_sort (port) values ('GI 1/0/6');
insert into test_sort (port) values ('GI 1/0/3');
insert into test_sort (port) values ('GI 1/0/12');
insert into test_sort (port) values ('TE 1/1/3');
insert into test_sort (port) values ('GI 1/1/1');
insert into test_sort (port) values ('GI 2/0/11');
insert into test_sort (port) values ('GI 2/0/1');
insert into test_sort (port) values ('GI 2/0/3');
insert into test_sort (port) values ('GI 1/1/2');
insert into test_sort (port) values ('TE 1/1/4');
我尝试获得此输出:
GI 1/0/1
GI 1/0/3
GI 1/0/4
GI 1/0/6
GI 1/0/10
GI 1/0/12
GI 1/1/1
GI 1/1/2
TE 1/1/3
TE 1/1/4
GI 2/0/1
GI 2/0/3
GI 2/0/11
我尝试按长度排序,使用子字符串,二进制,* 1但没有成功。
非常感谢您的帮助!
答案 0 :(得分:0)
没有内置的排序功能或排序规则会跳到字符串中的第4个字符并根据它进行排序。如果你真的需要这种排序,你应该把这个字符串分成两个字段,然后执行二维排序。
即。像这样的表:
port_alpha port_numeric
---------- ------------
GI 2/0/1
TE 1/1/3
... ...
查询如:
SELECT CONCAT_WS(' ', port_alpha, port_numeric) AS port
FROM test_sort
ORDER BY port_numeric ASC, port_alpha ASC
不分割你的领域你可以做类似的事情:
SELECT port FROM test_sort
ORDER BY SUBSTRING_INDEX(port, ' ', -1) ASC, port ASC
这并不理想,因为这会禁止在端口字段上使用索引来执行排序,并使其成为性能不佳的查询。
答案 1 :(得分:0)
你可以使用这样的查询:
int array[] = {4, 2, 5, 3};
测试查询
SELECT *
FROM test_sort
ORDER BY
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',1),' ',-1)+0,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',2),'/',-1)+0,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',3),'/',-1)+0;