Sql 根据字符数将列拆分为多列

Sql 根据字符数将列拆分为多列,sql,sql-server,Sql,Sql Server,我目前在一个表中只有一列。每行包含完全相同数量的字符。我需要一种能够将这一列拆分为多列的方法。该表有超过110万行,因此代码效率非常重要。所有行都是用相同的结构设置的,这意味着前5个字符总是专用于firstname,例如,后6个字符总是专用于lastname。我知道如何使用以下命令获取最左边的字符: insert into table2 select left(column1,2), substring(column1, 3, len(column1) ) from table1 上面的问题是

我目前在一个表中只有一列。每行包含完全相同数量的字符。我需要一种能够将这一列拆分为多列的方法。该表有超过110万行,因此代码效率非常重要。所有行都是用相同的结构设置的,这意味着前5个字符总是专用于firstname,例如,后6个字符总是专用于lastname。我知道如何使用以下命令获取最左边的字符:

insert into table2
select left(column1,2), substring(column1, 3, len(column1) ) from table1
上面的问题是1)它创建了一个新表,而不是修改现有表。2)一旦我将第一组字符拆分为一列,我就不知道如何获取下一组字符

下面是我希望它如何工作的示例:

当前

第1栏

  • abcdefghijklmnop
  • qrstuvwxyz123456
我想要的是:

第1列-----------第2列------第3列

  • abcdefg--------hij--------klmnop
  • qrstuvw-----------------xyz--------------------123456
下图:

我通常可以通过我在SQL中对数据的重要性来解决这个问题。但是,我用于导入数据的txt文件无法正确地对列进行dilimate,因此必须将所有列作为一列导入。

这应该会有所帮助

select 'dgfsrsdgsdghshdsdfhzhs' column1 into #table_name



ALTER TABLE #table_name
ADD firstname varchar(5) ,
    lastname varchar(6);


    update #table_name
    set firstname = SUBSTRING (column1,1,5),
     lastname = SUBSTRING (column1,6,6)


     select * from #table_name

假设修改必须在同一个表中完成,并且子字符串startposition和length是根据下面预期的输出获取的,那么代码将完成所需的工作
更新表1
设置列1=子串(c1,1,8), 第2列=子串(c1,8,3),
column3=子字符串(c1,11,7)

这里就是您在这里提到的确切场景

DROP TABLE dbo.table1
DROP TABLE dbo.table2

CREATE TABLE dbo.table1
 (column1 VARCHAR(100))

CREATE TABLE dbo.table2
 (column1 VARCHAR(100),
  column2 VARCHAR(100),
  column3 VARCHAR(100)
 )

INSERT INTO dbo.table1
VALUES ('abcdefghijklmnop'),('qrstuvwxyz123456')

INSERT INTO dbo.table2
SELECT LEFT(column1,7) AS column1,SUBSTRING(column1,8,3) column2,RIGHT(column1,6) column3
FROM dbo.table1


SELECT *
FROM table1

SELECT *
FROM table2

请以文本形式发布预期结果、示例结果。我在尝试找出如何进行换行以使列匹配时遇到问题?这是一个很好的在线制表工具:@HasibIbradzic,你的问题不清楚。首先,“多列”是什么意思,是指两列吗?根据insert查询,您已经知道答案。不清楚你在找什么。在第二个问题中,您说的是“下一个集合”下一个集合是什么意思?根据插入查询,您只有2列,其余的是什么?如果您导入的文件是固定宽度的,为什么不在导入时将其指定为固定宽度?那你就不必费劲了。