SQL 动态地将值拆分为新列

Posted

技术标签:

【中文标题】SQL 动态地将值拆分为新列【英文标题】:SQL Dynamically Split Values into new columns 【发布时间】:2021-02-10 16:14:38 【问题描述】:

有一个表,其中包含用逗号分隔的对象的不同 IP 值。寻找将它们动态拆分为新列的方法。例如,

10.12.11.20, 192.168.1.3, 192.168.1.4
192.168.1.50,

希望根据表中返回的结果将它们拆分为相关列(IPAddress0、IPAddress1 等)将这些值拆分为新行是否更容易/更好?

更新:

尝试了以下方法:

 substring(ip,1,charindex(',',ip.IP)-1) as Col1
,substring(ip,charindex(',',ip.IP)+1,len(ip.IP)) as Col2

这导致第一个 IP 和第二个 IP 进入新列,但如果对象的 IP 多于它们在 Col2 中显示的 IP 数

【问题讨论】:

如果您不知道结果集中的列数,这将比您预期的要麻烦得多。 @GordonLinoff 如果对象可以包含一个或多个值,您会建议如何处理它? @Austin4778 你用的是什么数据库管理系统?是否严格要求你有一个表,每个 ip 作为它自己的列 - 一个表,每个 ip 作为它自己的行,你可以在查询时随意处理它。 @Error_2646 SQL Server。新行也可以。只需用逗号分隔地址即可 @Austin4778 这应该对你有用,然后***.com/questions/5493510/… 【参考方案1】:

如果您有 SQL 2016 或更高版本并且行也适合您,您可以使用 STRING_SPLIT,如下所示。

SELECT VALUE FROM STRING_SPLIT ( '10.12.11.20,192.168.1.3,192.168.1.4' , ',' ) 

【讨论】:

以上是关于SQL 动态地将值拆分为新列的主要内容,如果未能解决你的问题,请参考以下文章

动态地将值传递给数据对象

如何在猫鼬中动态地将值推入对象的属性?

协助将数据框拆分为新列

动态地将值(例如:innerHTML)传递给另一个元素作为值

在存在 NaN 的情况下将 pandas 列拆分为新列

将单元格中的数据拆分为新列 Openoffice Calc