我有一个字符串值的列,类似1, 1.1, 1.1.2, 1.2, 2, 2.1, 1.3, 1.1.3
,一个用于记录,当然,我想要一个句子返回此字段排序的记录,如图书索引
1
1.1
1.1.2
1.1.3
1.2
1.3
2
2.1
由于
答案 0 :(得分:1)
使用ORDER BY
:
CREATE TABLE #tab(col VARCHAR(1000));
INSERT INTO #tab(col)
SELECT '1'
UNION ALL SELECT '1.1'
UNION ALL SELECT '1.1.2'
UNION ALL SELECT '1.1.3'
UNION ALL SELECT '1.2'
UNION ALL SELECT '1.3'
UNION ALL SELECT '2'
UNION ALL SELECT '2.1';
SELECT *
FROM #tab
ORDER BY col;
的 LiveDemo
强>
修改强>
仅适用于 SQL Server 2012 + :
的有趣和实验解决方案WITH cte AS (
SELECT col,
CASE LEN(col) - LEN(REPLACE(col, '.', ''))
WHEN 0 THEN col + '.0.0.0'
WHEN 1 THEN col + '.0.0'
WHEN 2 THEN col + '.0'
ELSE col
END AS col_alt
FROM #tab
)
SELECT col
FROM cte
ORDER BY
LEN(PARSENAME(col_alt,4)),
PARSENAME(col_alt,4),
LEN(PARSENAME(col_alt,3)),
PARSENAME(col_alt,3),
LEN(PARSENAME(col_alt,2)),
PARSENAME(col_alt,2),
LEN(PARSENAME(col_alt,1)),
PARSENAME(col_alt,1);
的 LiveDemo2
强>
答案 1 :(得分:1)
如果点之间的值都是单个字符(如问题中所示),那么最简单的方法是按字符串的长度排序,然后按字符串排序:
len
(在某些数据库中,length
可能拼写为$( '#' + this.className ).appendTo('.' + this.className);
。)
注意:这仅在单个数字分开点时有效。更通用的解决方案需要一些数据库知识。