对于很多喜欢利用数据库函数的开发者来说,这可能听起来有些疯狂。
但是在经历了为mysql和postgrsql与php创建和调试应用程序时对比日期函数的问题后,我得出的结论(对于自己而言)是,最简单、最不会出现SQL问题的方法就是不利用任何函数。
为什么?因为如果你在像PHP这样的中间件语言中进行开发,PHP拥有所有这些函数,并且它们很容易像比较整数一样在应用程序代码中实现。PostgreSQL时间戳与UNIX时间戳不相等,MySQL的UNIX时间戳也不等同于PostgresQL或Oracle的时间戳……如果使用数据库时间戳,则在移植时变得更加困难。
所以,只需使用一个整数,而不是时间戳,作为自1970年1月1日午夜以来的秒数,无需考虑数据库时间戳,使用gmdate()存储所有内容为GMT时间,以避免时区问题。
如果您需要从其他数据中搜索、排序或比较日期、月份、年份、星期几或任何其他字段,在您的应用程序中,使用INTEGER类型表示time_day、time_hour、time_seconds或任何要索引的内容将使数据库更平稳、可移植。在大多数情况下,您只需使用一个字段:INTEGER time_created NOT NULL。
(在您的数据库行中使用更多字段是我发现的唯一缺点,但这并不会引起太多麻烦或喝咖啡 :))
php的日期函数非常出色,可以比较日期,
但在mysql或postgresql中比较日期?不需要...使用整数sql比较
我意识到在插入函数中使用CURRENT_TIMESTAMP可能会看起来更容易。哈!
不要被愚弄。
如果time-initialized是postgresql时间戳,则无法执行DELETE FROM SESSION_TABLE WHERE time-initialized < '2 days'
但是你可以这样做:
DELETE FROM SESSION_TABLE WHERE time_initialized < '$yesterday'
只要在php中将$yesterday设置为自1970年以来昨天的秒数即可。
这比在postgresql选择语句中比较时间戳更容易维护会话记录。
SELECT age(),SELECT extract()和asbtime本身就很头疼。这只是我的观点。
您可以使用php日期对象进行加法,减法,<,>等操作
_peter_sysko
U4EA Networks,Inc.