【问题标题】:SQL Dynamically Split Values into new columnsSQL 动态地将值拆分为新列
【发布时间】: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 这应该对你有用,然后stackoverflow.com/questions/5493510/…

标签: sql sql-server cross-apply charindex


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2022-01-23
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多