在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周?
答案 0 :(得分:2)
试试这个:
UPDATE pref_users SET vip = GREATEST(vip, now()) + interval '1 week';
max()
可以正常使用时间戳。但是你以一种不可行的方式混合查询级别。您需要函数greatest(),而不是聚合函数max()。