2013-02-13 78 views
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 

我收到以下錯誤:從字符串轉換日期和/或時間時

轉換失敗。

在此先感謝。

+1

我建議你嘗試一次建立這個領域。讓它在一個領域工作。然後添加另一個字段。你的問題可能是標點符號 - 太多或沒有足夠的括號。如果逐步開發代碼,您會更容易發現問題。 – DOK 2013-02-13 13:58:16

+2

已經應用了一堆縮進,我認爲這個錯誤更易於發現! – 2013-02-13 14:02:47

+0

@DOK:謝謝,糾正了標點符號,發現了一個新的錯誤。以上提到。 – lollol 2013-02-13 14:25:07

回答

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

感謝所有。 :)

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 
+1

+1在缺少的cols上的好處(完全錯過了括號中的小數點) – 2013-02-13 14:05:52

1

正如我現在縮進它,你錯過了在第二部分與PATINDEX聲明支架(因爲你加了len(可能:

 1   2 3    4 432... 
patindex('% %', Len(CAST(Col2 AS varchar(30))) 
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 

看起來你失蹤的一列