2010-03-13 33 views
26

Tôi không thể tìm ra (googling, đọc hướng dẫn tham khảo mysql) cách lấy giá trị DATETIME trong giây trong MySQL.MYSQL - datetime to seconds

Tôi không có nghĩa là trích xuất giây từ ngày giờ, nhưng để chuyển đổi giây thành giờ.

Trả lời

27

Nếu bạn muốn có sự khác biệt giữa các giá trị DATETIME, sử dụng TIMESTAMPDIFF:

TIMESTAMPDIFF (đơn vị, datetime_expr1, datetime_expr2)

Returns datetime_expr2 – datetime_expr1, nơi datetime_expr1datetime_expr2 là ngày hay datetime biểu thức. Một biểu thức có thể là một ngày và một biểu thức khác là ngày giờ; một giá trị ngày được coi là một ngày giờ có phần thời gian '00: 00: 00 'khi cần thiết. Đơn vị cho kết quả (một số nguyên) được đưa ra bởi đối số đơn vị. Các giá trị pháp lý cho đơn vị giống với các giá trị được liệt kê trong phần mô tả của hàm TIMESTAMPADD().

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-> 128885

unit cũng có thể là HOUR đó là những gì bạn yêu cầu một trong các ý kiến.

+0

Xin lỗi, nhưng tôi hỏi về toàn bộ DATETIME: ( – Mike

+0

@ Mike: Xem câu trả lời cập nhật của tôi –

+0

ngọt ngào :) Tôi đánh dấu câu trả lời của bạn là câu trả lời chính xác :) cảm ơn bạn – Mike

34

Nếu bởi "chuyển sang giây", bạn có nghĩa là "chuyển đổi sang một UNIX Timestamp" (tức là số giây kể từ 1970-01-01), sau đó bạn có thể sử dụng UNIX_TIMESTAMP chức năng:

select UNIX_TIMESTAMP(your_datetime_field) 
from your_table 
where ... 


Và, vì mục đích hoàn thành, để chuyển đổi từ Dấu thời gian Unix thành ngày giờ, bạn có thể sử dụng hàm FROM_UNIXTIME.

+0

tốt và khi tôi muốn sự khác biệt giữa hai giờ trong HOURS, tôi có nên sử dụng một cái gì đó như thế nào? : chọn (unix_timestamp ('2010-01-02 18:00:00') - unix_timestamp ('2010-01-01 16:00:00'))/60/60; – Mike

+0

Tôi cho rằng hàm TIMESTAMPDIFF nên thực hiện thủ thuật: nó cho phép một hàm xác định đơn vị mong muốn (xem http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff) –

+0

cảm ơn bạn, Felix đã đề nghị sử dụng timesteampdiff, đó là những gì tôi muốn – Mike

2

Hàm UNIX_TIMESTAMP (datetime) trả về thời gian unix, xảy ra là số giây kể từ 1-Jan-1970 0000 UTC. Đó có thể là những gì bạn cần, nhưng không phải nếu bạn đang làm việc với ngày tháng năm sinh, ngày tháng lịch sử, hoặc ngày sau 2037.

2

Bắt đầu từ mysql 5.5.0 bạn có thể sử dụng to_seconds()

TO_SECONDS(FIELD_NAME) 

FIELD_NAME phải DATETIME loại

6

Sử dụng TIME_TO_SEC trong các phiên bản trước đó cho mysql

CHỌN TIME_TO_SEC (thời gian tên_cột) FROM tên_bảng

0

Tôi đã tạo ra truy vấn của riêng tôi cho vấn đề của bạn:

select (hour(*colname*)*3600 + minute(*colname*)*60 + second(*colname*)) 
from widgets 
where id=1; 
  • Sử dụng id=1 nếu bạn phải thực hiện một hàng cụ thể.
  • Kết quả sẽ tính bằng giây.
+0

Câu hỏi đã được trả lời một thời gian dài trước đây, và câu trả lời được chấp nhận cũng đề cập đến những ngày, không chỉ là giờ và phút. OP làm rõ trong một nhận xét rằng ông muốn tính toán sự khác biệt giữa hai thời gian biểu trong giờ. –

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