首页 > 解决方案 > sqlite,如果计算结果为负,将base中的值替换为零

问题描述

我有一个用于 discord.js 的 sqlite3 表,其中包含两个 id 列和点。每次它们变为负数时,我都需要将点的值设置为 0。例如,如果一个用户有 300 分,有人拿了 400 分,结果是 -100。应该用 0 代替。

我需要这样的东西: update table set value = case when points < ? then 0 else points - ? end

我怎么能做到?

ID 积分
123670 0
123987 -300

标签: sqlite

解决方案


首先更新表,这样就没有任何负数points

UPDATE tablename 
SET points = 0
WHERE points < 0;

然后创建一个触发器,每次将其值设置为负时points都会更新:0

CREATE TRIGGER trg_after_update_tab AFTER UPDATE ON tablename
WHEN NEW.points < 0
BEGIN
   UPDATE tablename
   SET points = 0
   WHERE id = NEW.id;
END;

请参阅演示

此外,您可以CHECK在表中设置一个约束来防止插入负数points

CREATE TABLE tablename (
  id INTEGER, 
  points INTEGER, 
  CHECK(points >= 0)
);

推荐阅读