SQL如何使用CASE WHEN THEN

时间:2018-10-18 15:39:10

标签: postgresql case

我希望标题能解释所有内容,但我仍将尝试并解释我要实现的目标。因此,我有一个名为 users 的表,我需要检查用户是否具有以下语句 true

  • 已启用
  • lastaccess <(EXTRACT('epoch'FROM CURRENT_TIMESTAMP)-(86400 * 200))* 1000

如果用户具有上述值 true ,则将其启用状态更改为 false 。同时,我需要用当前时间更新表中的 disabledTime 字段。

我编写了以下SQL,该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

上面的SQL将用户的启用状态设置为 false ,但 disabledTime 字段保持为空。

对此将提供任何帮助。

1 个答案:

答案 0 :(得分:1)

只需复制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