2012-08-23 3 views
8

table1からtable2にデータを移入しようとしていますが、両方とも同じ数の列を持ちます。VARCHARをT-SQLのdatetimeに変換するには?

table1のすべての列は、varcharです。 table2の列はvarcharintまたはdatetime、可能性など

私の質問は、移入の間の変換を行う方法ですか?

これは私が書いたサンプルクエリです。私は変換を行う部分が欠けている。私の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

申し訳ありませんが、あなたの編集が、物事のカップルを見ていない:varchar型は、table2のない存在する場所TABLE1があり、 *安全なキャストを行う必要があります。そのため、米国以外のシステムや別のシステムで問題に終わらないように、文字列形式(m/d/y)と一致するスタイルでconvertを使用する必要がありますセッション設定。 –

+0

@AaronBertrand私はtable1でvarcharをキャッチし、その誤りを修正するためにそれを編集しました。テーブル1、テーブル2の数が多すぎます。あなたは正しい正しい変換フォーマットについて正しいです...いつものように – Taryn

+0

私は最初の部分を理解しているかどうかわかりません。説明できますか?これは動作しますか? TABLE1さt から変換、表2に 選択s.acty_idを挿入する(日時、s.notes_datetime、s.notes_data、101)、s.notes_data右(表2 S t.acty_id = s.acty_idに \t \tに参加し、変換しますdatetime、t.notes_datetime、101)= s.notes_datetime ここで、t.acty_idはnullです – GLP

5

正しい答えはそのようTABLE1を補正することですそれは正しいデータ型を使用しています。一方で、日付と時刻の両方に一致する必要があると仮定すると、あなたはこの試みることができる:

and CONVERT(DATETIME, t.notes_datetime, 101) = s.notes_datetime 
関連する問題