bae*_*_nt 1 sql database sql-server primary-key
我有列类型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);
Run Code Online (Sandbox Code Playgroud)
这将排序如下:
I1
X1
I11
X11
Run Code Online (Sandbox Code Playgroud)
如果您还要分隔Ifrom X字段,可以在ORDER BY子句中添加另一个级别:
ORDER BY
LEFT(col, 1),
CAST(SUBSTRING(col, 2, LEN(col)-1) AS INT);
Run Code Online (Sandbox Code Playgroud)
这里真正的问题是您将文本和数字(作为文本)存储在一个列中.您最好拥有一个数字ID列以及一个单独的文本列.