Postgresql SQL如何使用CASE更新两个字段
我希望标题能解释这一切,但我仍将努力解释我正在努力实现的目标。因此,我有一个名为users的表,我需要检查用户是否有以下语句truePostgresql SQL如何使用CASE更新两个字段,postgresql,case,Postgresql,Case,我希望标题能解释这一切,但我仍将努力解释我正在努力实现的目标。因此,我有一个名为users的表,我需要检查用户是否有以下语句true 启用 lastaccess
- 启用
- lastaccess<(从当前时间戳中提取('epoch)-(86400*200))*1000
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