MySQL, tarihi n gün önce bir zaman damgası olarak alır


100

MySQL'de, örneğin 30 gün önce nasıl zaman damgası alabilirim?

Gibi bir şey:

select now() - 30

Sonuç bir zaman damgası döndürmelidir.


DATE_SUB sonrasın galiba .
joeslice

1
Hangi zaman damgası biçimi? MySQL DATE işlevleriyle çalışan kişilerin aşina olduğu format vardır ve bir UNIX tarzı zaman damgası vardır.
joebert

MySQL Zaman Damgasının peşindeyim.
Ben Noland

Yanıtlar:


184

DATE_SUB, ne istediğinize bağlı olarak bunun bir bölümünü yapacak

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
Birinci ve ikinci sorgudaki fark nedir?
Codler

5
görünür (v1) DATE_SUB, girişlere bağlı olarak DATETIME veya STRING döndürecektir. TIMESTAMP (v2) onu bir TIMESTAMP türüne zorluyor. dev.mysql.com/doc/refman/5.1/en/…
jsh

3

Kullanabilirsin:

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

Unix zaman damgaları için veya:

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

Standart MySQL tarih biçimi için.


0

Zaman damgasından itibaren negatif saatlere ihtiyacınız varsa

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

bu

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

x> this_timestamp kullanmanız gerekiyorsa, negatif ve pozitif değerler döndürür

ama bu

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

sadece pozitif, saatler dönecek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.