2012-10-17 49 views
7

Tôi có một dấu thời gian của biểu mẫu "17:16:28 ngày 13 tháng 9 năm 2011 PDT" trong cơ sở dữ liệu MySQL. Loại trường trong cơ sở dữ liệu là VARCHAR. Tôi muốn chuyển đổi VARCHAR này thành một trường kiểu TIMESTAMP trong MySQL.Chuyển đổi dấu thời gian VARCHAR thành TIMESTAMP?

Tôi đã thử một số solutions suggested elsewhere on this site, chẳng hạn như sử dụng hàm string_to_time, nhưng tất cả các giải pháp này bắt đầu từ một loại dấu thời gian khác.

Làm cách nào để chuyển đổi dấu thời gian VARCHAR được đề cập ở trên thành dấu thời gian được MySQL công nhận, theo cách mà tôi có thể sắp xếp dữ liệu của mình theo ngày?

+0

[STR_TO_DATE()] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date), nếu đó là ý của bạn, cung cấp các thông số định dạng cho * gần như * tất cả những gì bạn có. Ngoại lệ duy nhất tôi có thể phát hiện là múi giờ. Bạn có nhiều múi giờ khác nhau không? –

Trả lời

7

Bạn có thể làm điều này bằng cách sử dụng STR_TO_DATE chức năng trong MySQL, hãy thử này:

SELECT STR_TO_DATE("17:16:28 Sep 13, 2011 PDT", '%H:%i:%s %b %d, %Y PDT'); 

EDIT:

SELECT STR_TO_DATE(field_name, '%H:%i:%s %b %d, %Y PDT') AS new_time 
FROM table_name; 
+0

Xem nhận xét của tôi cho câu trả lời khác. – Mark

+0

Đã cập nhật câu trả lời với truy vấn. Xem thêm http://stackoverflow.com/questions/2523286/mysql-convert-tz – Omesh

+1

Rất cám ơn, Omesh. Điều này làm việc hoàn hảo. Tôi phát hiện ra rằng tôi chỉ có hai múi giờ trong cơ sở dữ liệu của mình và cho mỗi múi giờ tôi thực thi 'cập nhật tablename thiết lập newdate = STR_TO_DATE (olddate, '% H:% i:% s% b% d,% Y PDT') nơi olddate như '% PDT%' '(lần thứ hai thay đổi PDT thành PST) và nhận được những gì tôi muốn. – Mark

2

Sử dụng str_to_date với định dạng:

select unix_timestamp(str_to_date("17:16:28 Sep 13, 2011 PDT","%T %b %d, %Y PDT")); 

Nếu phần ngày (ví dụ: 13) không được đại diện là 01, 02..c. nhưng 1, 2, 3 khi chỉ có một chữ số, hãy thay đổi% d thành% e

Hãy cẩn thận vì múi giờ sẽ không được nhận dạng, chỉ là chuỗi ký tự cho định dạng! Nếu bạn có các múi giờ khác nhau cho các bản ghi khác nhau, bạn nên sử dụng hàm convert_tz() để có được dấu thời gian thích hợp.

+0

Tôi đã nhận thấy rằng mọi người luôn luôn đưa ra chính xác ví dụ tương tự, có chứa "17:16:28 ngày 13 tháng 9 năm 2011 PDT". Đây không phải là những gì tôi đang tìm kiếm. Tôi không muốn chuyển đổi một chuỗi. Tôi muốn chuyển đổi một trường SQL. Ngoài ra, có bất kỳ ví dụ cho convert_tz()? – Mark

+0

Tôi cho rằng đó là vì ví dụ được lấy từ câu hỏi của bạn :) Ngoài ra @Omesh đã trả lời phần khác về cách chuyển đổi trường này. Cụ thể hơn để chuyển đổi giá trị varchar thành một trường khác, đây là một cách tốt cho IMO. – Andrew

+0

Aha ... bạn nói đúng về ngày tháng, nhưng ý tôi là ở chỗ mọi người nhìn vào stackoverflow.com mọi người thường sử dụng chuỗi thay vì tham chiếu trường, điều này khiến tôi ngạc nhiên, vì MySQL thường là về cách đọc và xử lý dữ liệu từ các trường thay vì chuỗi. Ngoài ra, tôi không hiểu tại sao bạn thêm hàm unix_timestamp. Điều này thực sự không cần thiết. – Mark

Các vấn đề liên quan