我試過這個解決方案順序按拆分列,但不工作的時候數的長度不相同
您可以使它們包含相同數量的「。」。或令牌。例如,如果你知道有可能是一個最大的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 |
----------------------------
這種轉換後,你可以申請你提到的腳本。
你試過[古斯塔夫的答案](http://stackoverflow.com/a/28937678/3820271)? 「拆分」是去這裏的路。 – Andre
「不起作用」是什麼意思?對於那些不存在的部分,該函數返回0(零)以保留_Order By_。 – Gustav