Добавление 1 недели к отметке времени - PullRequest
1 голос
/ 20 ноября 2011

В 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 )

Мой вопрос : в качестве промоушена я хотел бы дать каждому 1 неделю VIP-статус.

Я надеялся сделать:

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

, но max () не работает с метками времени.

У кого-нибудь есть идея, как добавить 1 неделю в каждый vip столбец?

1 Ответ

2 голосов
/ 20 ноября 2011

Попробуйте:

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

max() отлично работает с временными метками.Но вы смешиваете уровни запросов таким образом, что это невозможно.Вам нужна функция наибольшая () , а не агрегатная функция max ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...