2015-11-16 23 views
-1

我有一個字符串值一列,像1, 1.1, 1.1.2, 1.2, 2, 2.1, 1.3, 1.1.3,一個用於記錄,當然,我想返回本場訂購的記錄,像一本書指數指數像SQL命令

1 
1.1 
1.1.2 
1.1.3 
1.2 
1.3 
2 
2.1 
句子

感謝

+0

只需使用'Order by' no? – Blag

+0

是否有任何值超過9?如果沒有,那麼直接的字符串比較就可以工作 –

+1

請用你正在使用的數據庫標記你的問題。 –

回答

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

+0

沒有限制,索引可以有任何深度和任何整數值 –

1

如果點之間的值都是罪GLE字符(如問題),則最簡單的方法是通過字符串的長度命令,然後將串:(在某些數據庫,len可能拼寫length

order by len(col), col 

注意:這僅適用於單個數字分開點的情況。更一般的解決方案需要對數據庫有一定的瞭解。