sql - 将 1 周添加到时间戳

标签 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 < 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/

相关文章:

php - MySQL 查询执行时间过长。查询返回良好结果,但可能设计不佳

mysql - 从 MySQL 导出的 CSV 未出现在指定目录中

sql - 从 View 中删除行是否会从基表 - MySQL 中删除行?

node.js - 耐克斯 :Error Pool2 - error: password authentication failed for user "username" (Not using UNIX account)

sql - 如何在 Postgresql 中转换为以逗号分隔文本的列名的表

postgresql - spring boot + hibernate 5 + java 8 + ZonedDateTime = ImplicitNamingStrategy 异常

javascript - 使用 bcrypt 进行密码散列

c# - 如何正确地将日期时间从 c# 传递到 sql?

SQL查询-使用级联条件进行过滤

postgresql - 如何用Hadoop实时处理Postgres数据库?