2012-08-23 10 views
8

Ich versuche, die Daten von table1 zu table2 zu füllen, beide haben die gleiche Anzahl von Spalten.Wie konvertiert man Varchar zu Datetime in T-SQL?

Alle Spalten in table1 sind vom Typ varchar. Die Spalten in table2 konnte varchar, int oder datetime usw. sein

Meine Frage ist, wie die Umwandlung während der Besiedelung zu tun?

Dies ist eine Beispielabfrage, die ich geschrieben habe. Ich vermisse das Teil, um die Konvertierung durchzuführen. Auch das Format meiner datetime ist 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 

Antwort

11

wird, verwenden Sie ein CAST() oder CONVERT() auf dem Feld:

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

Für Ihre Abfrage würden Sie wie folgt vor:

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

Sorry, hast deine Bearbeitung nicht sehen, aber ein paar Dinge: table1 ist, wo die varchar existiert, nicht table2, und Sie müssen eine * sichere * Umwandlung durchführen, also sollten Sie die Konvertierung mit einem Stil durchführen, der dem Zeichenkettenformat (m/d/y) entspricht, so dass Sie nicht mit Problemen auf einem nicht-englischen System oder mit anderen enden Sitzungseinstellungen. –

+0

@AaronBertrand Ich habe den Varchar in Tabelle1 abgefangen und bearbeitet, um diesen Fehler zu korrigieren. Zu viele Tabelle1, Tabelle2. Du hast recht über das richtige, Konversionsformat auch ... wie immer – Taryn

+0

Ich bin mir nicht sicher, ob ich den ersten Teil verstehe. können Sie erklären? Ob das funktioniert? Einfügen in Tab.2 select s.acty_id konvertieren (DATETIME s.notes_datetime, s.notes_data, 101), von s.notes_data Tabelle1 t gleich bei table2 s \t auf t.acty_id = s.acty_id \t und konvertieren (datetime, t.notes_datetime, 101) = s.notes_datetime wo t.acty_id null ist – GLP

5

Die richtige Antwort ist tabelle1 zu korrigieren, so dass Es verwendet die richtigen Datentypen. In der Zwischenzeit, vorausgesetzt, Sie sind sowohl Datum und Uhrzeit anpassen müssen, können Sie versuchen, diese:

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