按拆分列内容排序
Posted
技术标签:
【中文标题】按拆分列内容排序【英文标题】:Order By Split Column Content 【发布时间】:2016-06-16 05:20:25 【问题描述】:我有一个名为 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
... ETC... 我想做的是包含一个拆分字符串的 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
... ETC.... 我该怎么做这样的事情?
我尝试了这个解决方案Order By Split Column,但当数字长度不同时不起作用
【问题讨论】:
你试过Gustav's answer吗?Split
是这里的路。
请问“不起作用”是什么意思?该函数为那些不存在的部分返回 0(零)以保留 Order By。
【参考方案1】:
我尝试了这个解决方案按拆分列排序,但不起作用当数字长度不同时
您可以使它们包含相同数量的“。”或代币。例如,如果您知道最多可以有 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 |
----------------------------
此转换后,您可以应用您提到的脚本。
【讨论】:
可悲的是,替换在 VB.NET 访问的 MS-access 中不起作用,有人解释使用 INSTR 这样的***.com/questions/4834536/… ..?【参考方案2】:据我了解,您需要 MS Access SQL 的解决方案,而不是 MS SQL。如果是这样,那么您提到的主题中的Gustav's solution 可以正常工作,无需任何更改
【讨论】:
以上是关于按拆分列内容排序的主要内容,如果未能解决你的问题,请参考以下文章