2010-04-02 33 views
2

由於mysql中的TIMESTAMP存儲爲表示從1970-jan-1 0:00:00(以秒爲單位)的時間間隔的32位值,因此我假定在TIMESTAMP值上使用減號( - )運算符會給出這些值的差秒。其實不是:爲什麼minus操作符會給出與mysql中的TIMESTAMPDIFF()函數不同的結果?

+---------------------------------------------------------------------+ 
| TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:29:59") | 
+---------------------------------------------------------------------+ 
| 41.000000               | 
+---------------------------------------------------------------------+ 
1 row in set (0.05 sec) 

mysql> select timestampdiff(SECOND,TIMESTAMP("2010-04-02 10:30:00"),TIMESTAMP("2010-04-02 10:29:59")); 
+-----------------------------------------------------------------------------------------+ 
| timestampdiff(SECOND,TIMESTAMP("2010-04-02 10:30:00"),TIMESTAMP("2010-04-02 10:29:59")) | 
+-----------------------------------------------------------------------------------------+ 
| -1                      | 
+-----------------------------------------------------------------------------------------+ 

mysql> select TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:30:01") ; 
+---------------------------------------------------------------------+ 
| TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:30:01") | 
+---------------------------------------------------------------------+ 
| -1.000000               | 
+---------------------------------------------------------------------+ 

+---------------------------------------------------------------------+ 
| TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:31:00") | 
+---------------------------------------------------------------------+ 
| -100.000000               | 
+---------------------------------------------------------------------+ 

看來諸如One分差是100,而不是60

這是爲什麼?

回答

1

只是一個瘋狂的猜測,但也許你在三種情況下將字符串轉換爲整數?

20100402103000 - 20100402103100 = -100

20100402103000 - 20100402103001 = -1

20100402103000 - 20100402102959 = 41

另一種情況執行轉換正常。

+0

哇,MySQL的「選擇 」234:234「 - 」3「; ==> 231 好吧,它似乎我沒有投它:) – f3r3nc 2010-04-02 16:20:22

0

使用的正確函數是UNIX_TIMESTAMP()

TIMESTAMP()返回日期(時間),格式爲「2003-12-31 00:00:00」。

而且,沒有什麼錯誤使用

SELECT TIMESTAMPDIFF(SECOND,NOW(),TIMESTAMP("2010-04-02 19:29:59")); 
+0

彈出問題從現在()減去時間戳字段。 將解決方案如下所示:UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(mytimestamp)? – f3r3nc 2010-04-02 16:19:23

+0

SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP('2010-04-02 19:26:00')產生正確的結果(對我來說,30秒) – 2010-04-02 16:26:45

+0

是啊,我想這只是使用內置的轉換器更好表示可能會隨時間而改變,或者可能在2038年結束:)謝謝 – f3r3nc 2010-04-02 16:32:09

相關問題