Sql server 将csv字段拆分为多列
我有一个包含200000行数据的表。现场与会者已以csv格式填写;用逗号分隔符拆分。我想把这个字段分成7个不同的列,分别标记为Field1、Field2等 示例数据: 新格式Sql server 将csv字段拆分为多列,sql-server,csv,Sql Server,Csv,我有一个包含200000行数据的表。现场与会者已以csv格式填写;用逗号分隔符拆分。我想把这个字段分成7个不同的列,分别标记为Field1、Field2等 示例数据: 新格式 这篇评论太长了 我倾向于以逗号分隔的格式导出数据,然后重新导入。有了这些数据量,您可以执行以下操作: 运行示例中的select*或select pkEventBooking+,“+与会者 将数据复制到Excel中 转到“数据”功能区并选择“文本到列” 另存为文件 使用制表符分隔符导入文件 顺便说一下,我真的建议您将数据结构
这篇评论太长了 我倾向于以逗号分隔的格式导出数据,然后重新导入。有了这些数据量,您可以执行以下操作:
select*或select pkEventBooking+,“+与会者
- pkEventBooks
- 与会者
insert into EventAttendees(EventBookId, Attendee)
select t.EventBookId, ss.Attendee
from table t cross apply
dbo.SplitString(Attendees) as ss(Attendee);
您可以通过谷歌搜索“SQL Server splitstring”来获得此类函数的定义。测试数据
查询
这段代码很棒,我只需要“开启ARITHABORT”,现在就可以了。做得好!!
pkEventBooking Field1 Field2 Field3 Field 4 Field5 Field6 Field7
166935 p1193 c21867 c21827 c21963 c18069 c19222
195867 p1193 c21827 c22572 c19222 c22573 c21963 c18069,
insert into EventAttendees(EventBookId, Attendee)
select t.EventBookId, ss.Attendee
from table t cross apply
dbo.SplitString(Attendees) as ss(Attendee);
DECLARE @TABLE TABLE (pkEventBooking INT, Attendees NVARCHAR(MAX))
INSERT INTO @TABLE VALUES
(166935 , 'p1193,c21867,c21827,c21963,c18069,c19222'),
(195867 , 'p1193,c21827,c22572,c19222,c22573,c21963,c18069')
;WITH Split_Names (pkEventBooking, Attendees)
AS
(
SELECT pkEventBooking,
CONVERT(XML,'<Attendees><Attendee>'
+ REPLACE(Attendees,',', '</Attendee><Attendee>') + '</Attendee></Attendees>') AS Attendees
FROM @Table
)
SELECT pkEventBooking,
Attendees.value('/Attendees[1]/Attendee[1]','varchar(100)') AS Attendees1,
Attendees.value('/Attendees[1]/Attendee[2]','varchar(100)') AS Attendees2,
Attendees.value('/Attendees[1]/Attendee[3]','varchar(100)') AS Attendees3,
Attendees.value('/Attendees[1]/Attendee[4]','varchar(100)') AS Attendees4,
Attendees.value('/Attendees[1]/Attendee[5]','varchar(100)') AS Attendees5,
Attendees.value('/Attendees[1]/Attendee[6]','varchar(100)') AS Attendees6,
Attendees.value('/Attendees[1]/Attendee[7]','varchar(100)') AS Attendees7
FROM Split_Names
╔════════╦════════════╦════════════╦════════════╦════════════╦════════════╦════════════╦════════════╗
║ Value ║ Attendees1 ║ Attendees2 ║ Attendees3 ║ Attendees4 ║ Attendees5 ║ Attendees6 ║ Attendees7 ║
╠════════╬════════════╬════════════╬════════════╬════════════╬════════════╬════════════╬════════════╣
║ 166935 ║ p1193 ║ c21867 ║ c21827 ║ c21963 ║ c18069 ║ c19222 ║ NULL ║
║ 195867 ║ p1193 ║ c21827 ║ c22572 ║ c19222 ║ c22573 ║ c21963 ║ c18069 ║
╚════════╩════════════╩════════════╩════════════╩════════════╩════════════╩════════════╩════════════╝