按拆分列内容排序

时间:2016-06-16 05:20:25

标签: sql ms-access

我有一个列调用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但是当数字长度不相同时不起作用

2 个答案:

答案 0 :(得分: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 |
----------------------------

完成此转换后,您可以应用您提到的脚本。

答案 1 :(得分:2)

据我所知,您需要MS Access SQL的解决方案,而不是MS SQL。如果是这样,那么您提到的主题中的Gustav's solution可以正常运行而无需任何更改