我对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()错了吗?
答案 0 :(得分:2)
CONV()
会为您提供INTEGER
,而不是DATETIME
。您必须在其上使用FROM_UNIXTIME()
,或者只使用简单的数学:
SELECT *
FROM mytable
WHERE UNIX_TIMESTAMP() - CONV(thetimestamp, 16, 10) < 86400
然后去找那个决定用十六进制存储时间戳的人用棍子打他们,直到他们承诺永远不再这样做。
答案 1 :(得分:0)
问题是,一旦你拨打CONV()
,就会得到一个整数。因此,您需要将NOW()
DATETIME
与INT
进行比较。
您需要包含FROM_UNIXTIME()
或类似内容:
$query = "SELECT * FROM mytable"
. " WHERE timediff(NOW(), FROM_UNIXTIME(CONV(thetimestamp, 16, 10))) < '24:00:00'";
希望有所帮助。