拆分和复制表

时间:2013-02-13 13:52:56

标签: sql-server select insert copy

你好以下是问题;如果有办法解决它,请告诉我......

问题:需要将表T1复制到另一个表T2。 但是复制时应将T1.Col2拆分为T2.Col2和T3.Col3。

这是我使用的查询;

Insert INTO T2 (Col1,Col2)
SELECT Col1, 
    substring(
        CAST(Col2 AS varchar(30)), 
        1, 
        patindex('% %', CAST(Col2 AS varchar(30)))-1
    ), 
    substring(
        CAST(Col2 AS varchar(30)), 
        patindex('% %', Len(CAST(Col2 AS varchar(30))))+1,
        Len(Col2)
    )

from T1

我收到以下错误:

  

从字符串转换日期和/或时间时转换失败。

提前致谢。

4 个答案:

答案 0 :(得分:3)

您的选择中有2个紧密的parens,并且您在插入时缺少第三列名称。

Insert INTO T2 (Col1,Col2,Col3)
SELECT Col1, 
    substring(CAST(Col2 AS varchar(30)), 1, patindex('% %', CAST(Col2 AS varchar(30)))-1), 
    substring(CAST(Col2 AS varchar(30)), patindex('% %', Len(CAST(Col2 AS varchar(30))))
from T1

答案 1 :(得分:1)

正如我现在缩进它,你在第二部分用patindex语句错过了括号(因为你可能添加了len(

        1          2    3               4  432...
patindex('% %', Len(CAST(Col2 AS varchar(30)))

答案 2 :(得分:1)

你可以尝试这个,让我们知道它是否有效

Insert INTO T2 (Col1,Col2, Col3)
SELECT Col1, 
substring(CAST(Col2 AS varchar(30)), 1, patindex('% %', CAST(Col2 AS varchar(30)))-1), 
substring(CAST(Col2 AS varchar(30)), patindex('% %', Len(CAST(Col2 AS varchar(30)))))
from T1

看起来你错过了其中一个专栏

答案 3 :(得分:0)

以下是答案,

INSERT INTO T2 
           (T2COL1
           ,T2COL2 
           ,T2COL3) 
SELECT T1COL1 
      ,Convert(date, CONVERT(nvarchar(20), T1COL2, 101)) 
      ,convert(time(7), CONVERT(nvarchar(20), T1COL2, 108)) 
FROM T1

我们可以在处理日期和时间时使用转换代码来简化工作。我提到了以下链接;

http://www.blackwasp.co.uk/SQLDateTimeFormats.aspx

谢谢大家。 :)