将1周添加到时间戳

时间:2011-11-20 10:28:11

标签: sql postgresql

在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&lt; now()< /强>)

我的问题:作为促销活动,我想给每个人1周的VIP身份。

我希望这样做:

update pref_users set vip = max(vip, now()) + interval '1 week';

但是max()不适用于时间戳。

请有人知道,如何在每个人的贵宾栏中加1周?

1 个答案:

答案 0 :(得分:2)

试试这个:

UPDATE pref_users SET vip = GREATEST(vip, now()) + interval '1 week';

max()可以正常使用时间戳。但是你以一种不可行的方式混合查询级别。您需要函数greatest(),而不是聚合函数max()。