2014-05-09 71 views
0

我對mysql有點新,但是在查看了很多與數據庫中的十六進制值相關的SO樣本後,從十六進制轉換爲十進制,然後檢索在過去的24小時中的所有記錄,我認爲這會成功 - 在下面的查詢thetimestamp是加入每條記錄的時間,這是一個十六進制值:mysql字段有十六進制時間,需要過去24小時內的所有記錄

 $query = "SELECT * FROM mytable" 
    . " WHERE timediff(NOW(), CONV(thetimestamp, 16, 10)) < '24:00:00'"; 

在閱讀各種SO例子,有很多方法可以在最近的24小時內添加記錄,這個看起來是最好用的,因爲如果我只能從數據庫中獲取我的十六進制時間值爲十進制數,那麼我懷疑上述方法是有效的。

我的問題是,我必須處理的數據庫存儲在十六進制的時間,在我的查詢上面顯示的字段,時間戳

我想用CONVERT如我之前所做的那樣將轉換每條記錄的thetimestamp從十六進制到十進制,以便調用timeDiff測量()會成功。

當我運行查詢時,我得到一個有效的結果資源,但找到與我的查詢匹配的零個記錄,儘管事實上記錄已經在過去的24小時內添加了。

我在這裏使用CONV()錯誤嗎?

+0

我現在正在查看一個數據庫,它的時間戳爲dateTime和十六進制....使我瘋狂。 – VikingBlooded

+1

在你完全瘋狂之前轉換這些東西。我想不出爲什麼它們對於非本地數據類型是合理的。 – tadman

回答

2

CONV()會給你一個INTEGER,而不是DATETIME。你不得不使用就可以了FROM_UNIXTIME(),或者只是使用純數學:

SELECT * 
FROM mytable 
WHERE UNIX_TIMESTAMP() - CONV(thetimestamp, 16, 10) < 86400 

,然後去發現,決定時間戳存儲在十六進制,並用棍子打他們,直到他們承諾永遠不會做它的人再次。

+0

我必須越來越近,但我在Windows 8.1機器本地Web服務器上,我得到一個空查詢結果,也許是因爲UNIX上的UNIX_TIMESTAMP()沒有實現Windows的xampp ...? – CFHcoder

0

問題是一旦你呼叫CONV(),你最終得到一個整數。因此,您將NOW()這是DATETIMEINT比較。

您需要包括FROM_UNIXTIME()或類似的東西:

$query = "SELECT * FROM mytable" 
. " WHERE timediff(NOW(), FROM_UNIXTIME(CONV(thetimestamp, 16, 10))) < '24:00:00'"; 

希望有所幫助。

相關問題