2012-08-23 32 views
8

Tôi đang cố gắng điền dữ liệu từ table1 đến table2, cả hai đều có cùng số cột.Làm thế nào để chuyển đổi varchar thành datetime trong T-SQL?

Tất cả các cột trong table1 thuộc loại varchar. Các cột trong table2 có thể là varchar, int hoặc datetime, v.v.

Câu hỏi của tôi là cách thực hiện chuyển đổi trong quá trình điền?

Đây là truy vấn mẫu mà tôi đã viết. Tôi nhớ một phần để thực hiện chuyển đổi. Ngoài ra, định dạng của datetime của tôi là 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 

Trả lời

11

Bạn sẽ sử dụng một CAST() hoặc CONVERT() trên sân của bạn:

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

Đối với truy vấn của bạn, bạn sẽ làm như sau:

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

Xin lỗi, không thấy chỉnh sửa của bạn, nhưng một vài điều: table1 là nơi chứa varchar, chứ không phải bảng 2, và bạn cần thực hiện một phép * an toàn để bạn nên sử dụng chuyển đổi với kiểu phù hợp với định dạng chuỗi (m/d/y) để bạn không gặp phải sự cố trên hệ thống tiếng Anh không phải của Hoa Kỳ hoặc với cài đặt phiên. –

+0

@AaronBertrand Tôi bắt được varchar trong table1 và chỉnh sửa nó để sửa lỗi đó. Quá nhiều table1, table2's. Bạn cũng đúng về định dạng chuyển đổi, chính xác ... luôn là – Taryn

+0

Tôi không chắc tôi hiểu phần đầu tiên. bạn có thể giải thích? sẽ làm việc này? chèn vào table2 chọn s.acty_id, chuyển đổi (datetime, s.notes_datetime, s.notes_data, 101), s.notes_data từ table1 t đúng tham gia table2 s \t trên t.acty_id = s.acty_id \t và chuyển đổi (datetime, t.notes_datetime, 101) = s.notes_datetime trong đó t.acty_id là null – GLP

5

Câu trả lời đúng là để sửa table1 để nó đang sử dụng đúng kiểu dữ liệu. Trong thời gian chờ đợi, giả sử bạn cần phải khớp cả ngày và giờ, bạn có thể thử điều này:

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