2

我的数据库有一个 TIMESTAMP 类型的数据字段。它被称为“我的时间”。我从 php 的 time() 函数中得到一个数字。例如:

print time();

然后我查询数据库:

SELECT * FROM mytable where mytime > 1369157557

它抱怨:

conversion error from string "1369157557"

我猜您无法将 PHP 时间戳与 Firebird 时间戳进行比较。为什么不?我该如何解决?

4

2 回答 2

3

有两种选择:在比较之前将该 unix 时间戳转换为 Firebird 时间戳。或在 Firebird-Support 列表中执行此消息中所述的操作

select DATEDIFF(second, timestamp '1/1/1970 00:00:00', current_timestamp)
from rdb$database

或者特别是在您的查询中:

SELECT * 
FROM mytable 
where DATEDIFF(second, timestamp '1/1/1970 00:00:00', mytime) > 1369157557

请记住,存储在数据库中的时间可能不会以 UTC 格式存储,在这种情况下,您还需要考虑与 UTC 的偏移量。

于 2013-05-22T12:57:29.757 回答
0

您可以使用 UNIX_TIMESTAMP 函数。请注意,尽管 php 和 mysql 可能不同意,但在几秒钟内和在时区方面都是如此。

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

SELECT * FROM mytable where UNIX_TIMESTAMP(mytime) > 1369157557
于 2013-05-22T08:47:21.273 回答