在mysql ORDER BY子句中用0s填充字符串的中间部分以尊重“true”数字顺序

时间:2012-05-10 04:11:04

标签: mysql sql natural-sort

在我的管理界面中,我有一个子域列表,它遵循以下逻辑:

node-k1
node-k2
node-k3
node-k4
node-k5
node-k6
node-k7
node-k8
node-k9
node-k10
node-k11

这些存储在mysql中。我需要按数字顺序列出它们,但是因为我在node-k之后缺少前导0,所以它会这样命令它们:

node-k1
node-k10
node-k11
node-k2
node-k3
etc

节点有不同的字母,因此node-j_会显示在node-k_之前。 ORDER BY node ASC显然可以正常使用这些字母,但这些数字是个烦人的问题。

有没有办法让ORDER BY子句按正确的顺序排列?这是一个仅限管理员的功能,因此性能不是真正的问题。

2 个答案:

答案 0 :(得分:3)

如果数字始终从字符7开始,则可以将其强制转换为如下整数:

SELECT *
FROM tbl
ORDER BY SUBSTR(subdomain, 1, 6), CAST(SUBSTR(subdomain, 7) AS UNSIGNED)

首先按前缀排序,然后按数字排序。

答案 1 :(得分:0)

在您的记录节点的表格中,必须有一个数字字段(唯一),它基本上是指节点的顺序。

ID NodeName
1节点-k1
2节点-k2
3节点-k3
4节点-k10
5节点-k11

按ID从表1中选择Nodename。

RHIAN