Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql SQL如何使用CASE更新两个字段_Postgresql_Case - Fatal编程技术网

Postgresql SQL如何使用CASE更新两个字段

Postgresql SQL如何使用CASE更新两个字段,postgresql,case,Postgresql,Case,我希望标题能解释这一切,但我仍将努力解释我正在努力实现的目标。因此,我有一个名为users的表,我需要检查用户是否有以下语句true 启用 lastaccess

我希望标题能解释这一切,但我仍将努力解释我正在努力实现的目标。因此,我有一个名为users的表,我需要检查用户是否有以下语句true

  • 启用
  • lastaccess<(从当前时间戳中提取('epoch)-(86400*200))*1000
如果用户具有上述值true,则将其启用状态更改为false。同时,我需要用当前时间更新表中的disabledTime字段

我编写了以下SQL,它能够为用户设置enabled=false,但不确定如何设置disabledTime字段

UPDATE users
SET
   enabled = CASE
   WHEN
       enabled = true
       AND lastaccess != 0
       AND lastaccess < (EXTRACT('epoch' FROM CURRENT_TIMESTAMP) - (86400*200))*1000
   THEN false
   ELSE enabled
END
更新用户
设置
启用=案例
什么时候
启用=真
和lastaccess!=0
和lastaccess<(从当前时间戳中提取('epoch)-(86400*200))*1000
那就错了
其他启用
终止
上述SQL将用户的启用状态设置为false,但disabledTime字段保持为空


在此方面的任何帮助都将不胜感激。

只需为
disabledTime
列复制相同的条件即可

UPDATE users SET
enabled = CASE
WHEN
    enabled = true
    AND lastaccess != 0
    AND lastaccess < (EXTRACT('epoch' FROM CURRENT_TIMESTAMP) - (86400*200))*1000
THEN false
ELSE enabled
END,
disabledTime = 
CASE
WHEN
    enabled = true
    AND lastaccess != 0
    AND lastaccess < (EXTRACT('epoch' FROM CURRENT_TIMESTAMP) - (86400*200))*1000
THEN CURRENT_TIMESTAMP
ELSE disabledTime
END
更新用户集
启用=案例
什么时候
启用=真
和lastaccess!=0
和lastaccess<(从当前时间戳中提取('epoch)-(86400*200))*1000
那就错了
其他启用
终止
禁用时间=
案例
什么时候
启用=真
和lastaccess!=0
和lastaccess<(从当前时间戳中提取('epoch)-(86400*200))*1000
然后是当前的时间戳
否则禁用时间
终止

感谢您的快速响应,我想到了同样的问题,只是想知道,第一个案例是否已经将enabled的值设置为false,然后第二个案例才会检查它,或者它是一次性运行的?@rac3b3nn0n-两个案例都会“看到”相同的值,因此如果enabled为
true
,然后,对于第一种情况和第二种情况,它将
true
,用于清除它。。。然而,有一种方法可以消除代码重复!任何其他方法都可以在不重复相同代码的情况下完成此操作。@rac3b3nn0n-另一种方法可能是使用触发器,在
enabled
变为false后,将
disabledTime
更新为当前\u时间戳,但我更喜欢这种方法,而不是触发器。谢谢@Oto Shavadze