我的数据库有一个 TIMESTAMP 类型的数据字段。它被称为“我的时间”。我从 php 的 time() 函数中得到一个数字。例如:
print time();
然后我查询数据库:
SELECT * FROM mytable where mytime > 1369157557
它抱怨:
conversion error from string "1369157557"
我猜您无法将 PHP 时间戳与 Firebird 时间戳进行比较。为什么不?我该如何解决?
有两种选择:在比较之前将该 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 的偏移量。
您可以使用 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