索引就像sql命令一样

时间:2015-11-16 19:05:53

标签: sql

我有一个字符串值的列,类似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

由于

2 个答案:

答案 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); 。)

注意:这仅在单个数字分开点时有效。更通用的解决方案需要一些数据库知识。