2012-08-23 12 views
8

Próbuję wypełnić dane z table1 na table2, obie mają taką samą liczbę kolumn.Jak przekonwertować varchar na datetime w T-SQL?

Wszystkie kolumny w table1 są typu varchar. Kolumny w table2 może być varchar, int lub datetime itp

Moje pytanie brzmi, jak to zrobić konwersję podczas wypełniania?

To jest przykładowe zapytanie, które napisałem. Tęsknię za tą częścią, aby dokonać konwersji. Również format mojego datetime to 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 

Odpowiedz

11

Będziesz używać CAST() lub CONVERT() na polu:

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

Dla zapytania byś wykonać następujące czynności:

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

Niestety, nie widzi swoją edycję, ale kilka rzeczy: tabela1 gdzie istnieje varchar, nie Tabela 2, i musisz wykonać * bezpieczne * rzutowanie, więc powinieneś używać konwertowania ze stylem, który pasuje do formatu ciągu (m/d/r), abyś nie miał problemów z systemem w języku angielskim innym niż amerykański lub z innymi ustawienia sesji. –

+0

@AaronBertrand Złapałem varchar w tabeli1 i zredagowałem, aby poprawić ten błąd. Zbyt dużo table1, table2's. Masz rację co do prawidłowego formatu konwersji ... jak zawsze – Taryn

+0

Nie jestem pewien, czy rozumiem pierwszą część. możesz wytłumaczyć? Czy to zadziała? wstawić tabeli2 wybrać s.acty_id, konwersja (DateTime s.notes_datetime, s.notes_data, 101), z s.notes_data Tabela1 t prawo przyłączenia Tabela 2 e \t na t.acty_id = s.acty_id \t i konwersji (datetime, t.notes_datetime, 101) = s.notes_datetime gdzie t.acty_id ma wartość null – GLP

5

Prawidłowa odpowiedź to skorygować tabela1 tak że używa właściwych typów danych. W międzyczasie, zakładając, że trzeba dopasować zarówno datę i czas, można spróbować to:

and CONVERT(DATETIME, t.notes_datetime, 101) = s.notes_datetime 
Powiązane problemy