在 PostgreSQL 8.4 中我有一个用户表:
# \d pref_users;
Table "public.pref_users"
Column | Type | Modifiers
------------+-----------------------------+---------------
id | character varying(32) | not null
first_name | character varying(64) |
last_name | character varying(64) |
female | boolean |
vip | timestamp without time zone |
mail | character varying(254) |
对于购买了我设置的VIP身份的用户
update pref_users set vip = now() + interval '6 month' where id='12345';
后来在其他脚本中我只是检查它
select vip > now() as vip_is_active from pref_users where id='12345';
但也有 1) 从未购买过 VIP 的用户(vip = NULL)和 2) VIP 状态已经过期的用户(他们有 vip < now()强>)
我的问题:作为促销事件,我想给每个人 1 周的 VIP 身份。
我希望这样做:
update pref_users set vip = max(vip, now()) + interval '1 week';
但是 max() 不适用于时间戳。
有没有人有想法,如何为每个人的 vip 列添加 1 周?
最佳答案
试试这个:
UPDATE pref_users SET vip = GREATEST(vip, now()) + interval '1 week';
max()
可以很好地处理时间戳。但是您正在以一种不可行的方式混合查询级别。你想要函数 greatest() ,而不是聚合函数 max()。
关于sql - 将 1 周添加到时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200910/