sqlite - 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 |
解决方案
首先更新表,这样就没有任何负数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)
);
推荐阅读
- python - 为什么我在 Python 回归分析中的执行时间存在巨大差异?
- python - 从 YAML 读取后 Python openCV 断言失败
- php - 使用 volley 库从数据库中选择的用户名制作 numberpicker
- camunda - 如何基于 DMN 规则执行 Camunda BPMN 工作流
- jsf - IllegalArgumentException:JSF 中的 sortBy 列内的排序函数
- networking - HTTP / SOCKS5 转发
- python - 如何根据python中的字典更新excel列值
- php - 如何保存 HTML 内容?
- createjs - createjs 示例中 circle.x 和 circle.y 的目的是什么?
- python-3.x - 如何在 Binance 中获取硬币名称