MySQL lấy ngày n ngày trước làm dấu thời gian


97

Trong MySQL, làm cách nào để tôi lấy dấu thời gian từ 30 ngày trước?

Cái gì đó như:

select now() - 30

Kết quả sẽ trả về một dấu thời gian.


Tôi nghĩ bạn đến sau DATE_SUB .
joeslice

1
Định dạng nào của dấu thời gian? Có định dạng mà những người làm việc với các hàm MySQL DATE quen thuộc và có một dấu thời gian kiểu UNIX.
joebert

Tôi đang theo dõi Dấu thời gian MySQL.
Ben Noland

Câu trả lời:


179

DATE_SUB sẽ thực hiện một phần tùy thuộc vào những gì bạn muốn

mysql> SELECT DATE_SUB(NOW(), INTERVAL 30 day);
2009-06-07 21:55:09

mysql> SELECT TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
2009-06-07 21:55:09

mysql> SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
1244433347

11
Sự khác biệt với truy vấn thứ nhất và thứ hai là gì?
Codler vào

5
nó xuất hiện (v1) DATE_SUB sẽ trả về DATETIME hoặc STRING tùy thuộc vào dữ liệu đầu vào. TIMESTAMP (v2) đang buộc nó ở loại TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh

3

Bạn đã có thể sử dụng:

SELECT unix_timestamp(now()) - unix_timestamp(maketime(_,_,_));

Đối với dấu thời gian unix hoặc:

SELECT addtime(now(),maketime(_,_,_));

Đối với định dạng ngày MySQL tiêu chuẩn.


0

Nếu bạn cần số giờ âm từ dấu thời gian

mysql>SELECT now( ) , FROM_UNIXTIME( 1364814799 ) , HOUR( TIMEDIFF( now( ) , FROM_UNIXTIME( 1364814799 ) ) ) , TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 
2013-06-19 22:44:15     2013-04-01 14:13:19     1904    -1904

điều này

TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 

sẽ trả về giá trị âm và dương, nếu bạn cần sử dụng x> this_timestamp

nhưng điều này

HOUR( TIMEDIFF( now() , FROM_UNIXTIME( 1364814799 ) ) )

sẽ chỉ trả về số dương, giờ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.