Sql 根据字符数将列拆分为多列
我目前在一个表中只有一列。每行包含完全相同数量的字符。我需要一种能够将这一列拆分为多列的方法。该表有超过110万行,因此代码效率非常重要。所有行都是用相同的结构设置的,这意味着前5个字符总是专用于firstname,例如,后6个字符总是专用于lastname。我知道如何使用以下命令获取最左边的字符: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 上面的问题是
insert into table2
select left(column1,2), substring(column1, 3, len(column1) ) from table1
上面的问题是1)它创建了一个新表,而不是修改现有表。2)一旦我将第一组字符拆分为一列,我就不知道如何获取下一组字符
下面是我希望它如何工作的示例:
当前
第1栏
- abcdefghijklmnop
- qrstuvwxyz123456
- abcdefg--------hij--------klmnop
- qrstuvw-----------------xyz--------------------123456
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列,其余的是什么?如果您导入的文件是固定宽度的,为什么不在导入时将其指定为固定宽度?那你就不必费劲了。