我有一個字符串值一列,像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
句子
感謝
我有一個字符串值一列,像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
句子
感謝
使用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;
編輯:
只是爲了好玩和實驗解決方案的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);
沒有限制,索引可以有任何深度和任何整數值 –
如果點之間的值都是罪GLE字符(如問題),則最簡單的方法是通過字符串的長度命令,然後將串:(在某些數據庫,len
可能拼寫length
)
order by len(col), col
注意:這僅適用於單個數字分開點的情況。更一般的解決方案需要對數據庫有一定的瞭解。
只需使用'Order by' no? – Blag
是否有任何值超過9?如果沒有,那麼直接的字符串比較就可以工作 –
請用你正在使用的數據庫標記你的問題。 –