Câu hỏi MySQL nhận được ngày n ngày trước như một dấu thời gian


Trong MySQL, làm thế nào tôi sẽ nhận được một dấu thời gian từ, nói 30 ngày trước?

Cái gì đó như:

select now() - 30

Kết quả sẽ trả lại dấu thời gian.


76
2017-07-08 02:16


gốc


Tôi nghĩ rằng bạn đang sau DATE_SUB. - joeslice
Định dạng dấu thời gian là gì? Có những đị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ấu thời gian của MySQL. - Ben Noland


Các câu trả lời:


DATE_SUB sẽ làm một phần của 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

145
2017-07-08 03:59



Sự khác biệt với truy vấn thứ nhất và thứ hai là gì? - Codler
nó xuất hiện (v1) DATE_SUB sẽ trả về DATETIME hoặc STRING tùy thuộc vào đầu vào. TIMESTAMP (v2) đang buộc nó vào một loại TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/… - jsh


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 tháng chuẩn của MySQL.


3
2017-07-08 02:27





Nếu bạn cần 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ờ


0
2018-06-19 19:48