我目前在表格中只有一列。每行包含完全相同的字符数。我需要一种能够将这一列拆分成多列的方法。该表有超过110万行,因此代码的效率非常重要。所有行都设置为相同的结构,这意味着前5个字符始终专用于firstname,后6个字符始终用于lastname。我知道如何使用最左边的字符:
insert into table2
select left(column1,2), substring(column1, 3, len(column1) ) from table1
上述问题是1)它创建了一个新表而不是修改现有表。 2)一旦我将第一组字符分成一列,我就不知道如何抓住下一组。
以下是我希望如何运作的示例:
当前
第1栏
我想要的是什么:
第1栏-----------第2栏---------第3栏
下图:
我通常可以通过SQL对数据的重要性来解决这个问题。但是,我用来导入数据的txt文件无法正确地稀释列,因此必须将它们全部作为一列引入。
答案 0 :(得分:1)
这是您在此处提到的确切方案。
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
答案 1 :(得分:0)
这应该有帮助
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
答案 2 :(得分:0)
假设必须在同一个表中完成修改,并且根据预期的输出获取SUBSTRING起始位置和长度,代码将完成所需的操作
UPDATE table1
SET column1=SUBSTRING(c1,1,8),
column2=SUBSTRING(c1,8,3),
column3=SUBSTRING(c1,11,7)