1

您好,以下是问题;让我知道是否有任何方法可以解决它...

问题:需要将表 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

4 回答 4

3

您在选择时缺少 2 个关闭括号,并且您在插入时缺少第三列名称。

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
于 2013-02-13T13:58:05.420 回答
1

正如我现在缩进的那样,您在第二部分缺少带有 patindex 语句的括号(因为您添加了一个len(可能:

        1          2    3               4  432...
patindex('% %', Len(CAST(Col2 AS varchar(30)))
于 2013-02-13T13:58:27.353 回答
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

您似乎缺少其中一列

于 2013-02-13T14:00:49.700 回答
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

谢谢大家。:)

于 2013-02-14T06:10:10.413 回答