我有一个列类型为 varchar 作为主键的表;主要也是聚集索引。主键的值以 I 或 X 为前缀,后面是递增的数字(I1、I2、I3、...、X1、X2、X3、...)。目前默认的排序是 I1, I11, I111, I2, I21, I22, ....
在创建键并将其插入到树中时,有什么方法可以按数字顺序指定主键列的排序顺序吗?不在选择查询时间?所以排序顺序是I1, I2, I3, ..., I11, I12, I13
谢谢
最佳答案
您可以尝试仅使用列的数字部分进行排序,并将其转换为整数:
SELECT *
FROM yourTable
ORDER BY CAST(SUBSTRING(col, 2, LEN(col)-1) AS INT);
排序如下:
I1
X1
I11
X11
如果您还想将 I
与 X
字段分开,您可以在 ORDER BY
子句中添加另一个级别:
ORDER BY
LEFT(col, 1),
CAST(SUBSTRING(col, 2, LEN(col)-1) AS INT);
这里真正的问题是您将文本和数字(作为文本)存储在单个列中。你最好有一个数字 ID 列,以及一个单独的文本列。
关于sql - 如何在Sql Server 中为主键指定自定义排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50135755/