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 动态地将值拆分为新列的主要内容,如果未能解决你的问题,请参考以下文章