根据字符数

时间:2016-08-19 17:44:15

标签: sql sql-server

我目前在表格中只有一列。每行包含完全相同的字符数。我需要一种能够将这一列拆分成多列的方法。该表有超过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

下图:

Example

我通常可以通过SQL对数据的重要性来解决这个问题。但是,我用来导入数据的txt文件无法正确地稀释列,因此必须将它们全部作为一列引入。

3 个答案:

答案 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)