2016-06-16 111 views
1

我有一列調用它ID:順序按拆分列內容

1 
1.1 
1.2 
1.2.1 
1.2.2 
1.19.1.1 
1.2.3.1 
1.2.3.2 
1.19.1 
1.19.1.2 

... 等... 我想要做的是包括ORDER BY語句分割字符串,變成這個樣子:

1 
1.1 
1.2 
1.2.1 
1.2.2 
1.2.3.1 
1.2.3.2 
1.19.1 
1.19.1.1 
1.19.1.2 

... 等.... 我怎麼會做這樣的事?

我試過這個解決方案Order By Split Column但是當一些長度不工作不一樣

+1

你試過[古斯塔夫的答案](http://stackoverflow.com/a/28937678/3820271)? 「拆分」是去這裏的路。 – Andre

+0

「不起作用」是什麼意思?對於那些不存在的部分,該函數返回0(零)以保留_Order By_。 – Gustav

回答

2

我試過這個解決方案順序按拆分列,但不工作的時候數的長度不相同

您可以使它們包含相同數量的「。」。或令牌。例如,如果你知道有可能是一個最大的4個點(如1.1.1.1.1),那麼你可以運行此腳本來連接剩下的」 .0" 令牌:

create table mytable(id varchar); 

insert into mytable(id) 
values ('1'), ('1.1'), ('1.2'), ('1.2.1'), ('1.2.2'), ('1.19.1.1'), ('1.2.3.1'), ('1.2.3.2'), ('1.19.1'), ('1.19.1.2'); 

select id as original, id|| 
    case when length(id) - length(replace(id,'.','')) = 0 then ".0.0.0.0" 
     when length(id) - length(replace(id,'.','')) = 1 then ".0.0.0" 
     when length(id) - length(replace(id,'.','')) = 2 then ".0.0" 
     when length(id) - length(replace(id,'.','')) = 3 then ".0" 
    end as computed 
from mytable; 

您可以運行(每次打開一個SQL命令)的腳本here來測試它

結果:

---------------------------- 
| original | computed | 
---------------------------- 
| 1   | 1.0.0.0.0 | 
| 1.1  | 1.1.0.0.0 | 
| 1.2  | 1.2.0.0.0 | 
| 1.2.1  | 1.2.1.0.0 | 
| 1.2.2  | 1.2.2.0.0 | 
| 1.19.1.1 | 1.19.1.1.0 | 
| 1.2.3.1 | 1.2.3.1.0 | 
| 1.2.3.2 | 1.2.3.2.0 | 
| 1.19.1  | 1.19.1.0.0 | 
| 1.19.1.2 | 1.19.1.2.0 | 
---------------------------- 

這種轉換後,你可以申請你提到的腳本。

+0

不幸的是,替換在VB.NET訪問的MS訪問中不起作用,有沒有人給出解釋使用INSTR這樣的http://stackoverflow.com/questions/4834536/exception-when-trying-to-execute-replace-反對ms訪問..? –

2

據我所知,您需要MS Access SQL解決方案,而不是MS SQL。如果是這樣,那麼從你提到的主題Gustav's solution工作正常沒有任何變化