2011-11-20 139 views
1

在PostgreSQL 8.4我有一個用戶表:添加1周時間戳

# \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)  | 

對於用戶誰購買我設置

update pref_users set vip = now() + interval '6 month' where id='12345'; 
在其他腳本我只是檢查

,後來的VIP狀態它

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周?

回答

2

試試這個:

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

max()作品帶有時間戳就好了。但是,您正在以不可行的方式混合查詢級別。你需要函數greatest(),而不是聚合函數max()。