2012-08-23 72 views
8

我試圖填充從table1table2的數據,它們的列數相同。如何將T-SQL中的varchar轉換爲datetime?

table1中的所有列都是varchar的類型。 table2中的列可能爲varchar,intdatetime等。

我的問題是如何在填充過程中進行轉換?

這是我寫的一個示例查詢。我錯過了做轉換的部分。我的datetime的格式也是mm/dd/yyyy hh:mm:ss

insert into table2 
    select s.acty_id, s.notes_datetime, s.notes_data 
    from table1 t right join table2 s 
    on (t.acty_id =s.acty_id and t.notes_datetime =s.notes_datetime) 
    where t.acty_id is null 

回答

11

您將使用自己場上一個CAST()CONVERT()

Declare @dt varchar(20) 
set @dt = '08-12-2012 10:15:10' 
select convert(datetime, @dt, 101) 

您所查詢的,你會做到以下幾點:

insert into table2 
select s.acty_id, s.notes_datetime, s.notes_data 
from table1 t 
right join table2 s 
    on t.acty_id =s.acty_id 
    and convert(datetime, t.notes_datetime, 101) = s.notes_datetime 
where t.acty_id is null 
+0

對不起,沒看到你的編輯,但幾件事情:表1是在VARCHAR存在,不表2,你需要做一個*安全的*轉換,所以你應該使用與字符串格式(m/d/y)匹配的樣式進行轉換,這樣你就不會在非美國英語系統或不同的系統上遇到問題會話設置。 –

+0

@AaronBertrand我在table1中捕獲了varchar,並對其進行了編輯以糾正錯誤。 table1,table2太多了。你對的是正確的轉換格式也是如此......一如往常 – Taryn

+0

我不確定我是否理解第一部分。你可以解釋嗎?這會工作嗎?插入到表2 選擇s.acty_id,轉換(日期時間,s.notes_datetime,s.notes_data,101),從s.notes_data表1噸 右加入表2 S於t.acty_id = s.acty_id \t \t 並轉換( datetime,t.notes_datetime,101)= s.notes_datetime 其中t.acty_id爲空 – GLP

5

正確的答案是正確的表1,使它使用正確的數據類型。在此期間,假設你需要匹配日期和時間,你可以試試這個:

and CONVERT(DATETIME, t.notes_datetime, 101) = s.notes_datetime