MySQL отримує дату n днів тому як позначку часу


97

Як отримати в MySQL позначку часу, скажімо, 30 днів тому?

Щось на зразок:

select now() - 30

Результат повинен повернути позначку часу.


Я думаю, що ви після DATE_SUB .
joeslice

1
Який формат мітки часу? Існує формат, знайомий людям, які працюють з функціями MySQL DATE, і є позначка часу в стилі UNIX.
joebert

Я переслідую мітку часу MySQL.
Бен Ноланд

Відповіді:


179

DATE_SUB зробить частину цього залежно від того, що ви хочете

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
Чим відрізняється перший і другий запит?
Кодлер

5
здається (v1) DATE_SUB поверне DATETIME або STRING залежно від введених даних. TIMESTAMP (v2) примушує його до типу TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh

3

Ви можете використовувати:

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

Для міток часу Unix або:

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

Для стандартного формату дати MySQL.


0

Якщо вам потрібні від’ємні години від позначки часу

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

це

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

поверне негативні та позитивні значення, якщо вам потрібно використовувати x> this_timestamp

але це

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

повернеться лише позитивним, годин

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.