首页 > 解决方案 > 使用管道分隔符在 SQL 查询中将一列拆分为多列

问题描述

我在表格的一列中有以下数据,我想将其拆分为更多列。 |在这种情况下用作分隔符。列标题应该在之前:&列之后是它的值。

Column
-----------------------------------------------------------------------------
ID: 30000300 | Name: India | Use: New Use
ID: 30000400 | Name: Aus | New ID: 15625616 | Address 1: NEW Rd
ID: 30000400 | Name: USA | City: VIA ARAMAC | New ID: 123
ID: 30000500 | Name: Russia | New ID: 15624951 | Address 2: 2131 BEAUDESERT

输出应该是:

ID          Name    Use New ID  City     Address 1   Address 2   New City
----------------------------------------------------------------------
30000300    India   New Use                 
30000400    Aus         15625616        NEW Rd      
30000400    USA         15625616    VIA ARAMAC          GALILEE 
30000500    Russia      15624951            2131 BEAUDESERT

标签: sqlstringsplit

解决方案


您有几行在 nvarchar 列内包含键值对,但您需要一个表,该表具有基于键的标题,然后是仅包含值的行,无键。首先是像 Key1 这样的输入问题: Value1 | 键 2:值 2。这应该返回为

Key1 Key2
Value1 NULL
NULL Value2

或者这不是一个可能的情况?无论哪种方式,都存在生成具有动态列名的表的问题。

您的问题的问题是,这不是通常可以通过 SQL 解决的方案。您应该以您选择的编程语言获取数据,然后使用正则表达式或拆分方法来获取您需要的内容。

如果您坚持通过 SQL 执行此操作,则解决方案是将原始行输入转换为另一个字符串,然后您使用 sp_executesql ( https://docs.microsoft.com/en-us/sql/relational-databases/system-stored -procedures/sp-executesql-transact-sql),但我不推荐它。


推荐阅读