按拆分列内容排序

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 可以正常工作,无需任何更改

【讨论】:

以上是关于按拆分列内容排序的主要内容,如果未能解决你的问题,请参考以下文章

Excel如何把同一列的内容拆分为两列

怎样使excel表格内容按某一列排序

按所有列拆分数据框并插入到数据框列表中

熊猫如何按间隔按列拆分数据帧

熊猫如何按间隔按列拆分数据帧

excel2013使用分列功能拆分数据