mysql字段的时间为十六进制,需要过去24小时内的所有记录

时间:2014-05-09 19:02:19

标签: php mysql sql

我对mysql有些新意见,但在查看了大量与数据库中十六进制值相关的SO样本后,从十六进制转换为十进制,然后检索过去24小时内添加的所有记录,我认为这会成功 - 以下查询中的 thetimestamp 是每条记录的添加时间,它是十六进制值:

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

在阅读各种SO示例时,有很多方法可以在最近的24小时内添加记录,这个似乎最好用,因为如果我可以将我的十六进制时间值从数据库中获取为十进制,我怀疑上面的工作。

我的问题是我必须使用的数据库以十六进制存储其时间,在我上面的查询中显示的字段 thetimestamp

我认为使用CONVERT就像我上面所做的那样将每个记录的 thetimestamp 从十六进制转换为十进制,以便对timediff()的调用成功。

我运行查询时获得了有效的结果资源,但是找到了与我的查询匹配的零记录,尽管在过去24小时内添加了记录。

我在这里使用CONV()错了吗?

2 个答案:

答案 0 :(得分:2)

CONV()会为您提供INTEGER,而不是DATETIME。您必须在其上使用FROM_UNIXTIME(),或者只使用简单的数学:

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

然后去找那个决定用十六进制存储时间戳的人用棍子打他们,直到他们承诺永远不再这样做。

答案 1 :(得分:0)

问题是,一旦你拨打CONV(),就会得到一个整数。因此,您需要将NOW() DATETIMEINT进行比较。

您需要包含FROM_UNIXTIME()或类似内容:

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

希望有所帮助。