SQLite触发器设置日期加7天出现select附近语法错误如何修复
触发器语法错误修复及需求实现方案
原代码存在的核心问题
- 触发器定义缺少必填的
BEFORE/AFTER触发时机关键字,不符合SQLite触发器语法规则 - 监听字段逻辑错误:需求为更新
start_week时自动修改fin_semana,原代码错误监听了fin_semana本身的更新事件 - 赋值语法错误:给日期字段赋值时不需要套
SELECT关键字,也不需要额外加单引号包裹函数调用 - 语法冗余:
SET子句末尾多了多余的逗号,直接触发语法解析错误 - 缺少行级触发声明:未加
FOR EACH ROW会导致触发时出现全表操作的风险 - 日期计算逻辑不符合需求:原代码用
date('now','+6 day')取当前系统日期计算,实际应该基于更新后的start_week字段值计算对应周结束日期
修复后可运行的触发器代码
CREATE TRIGGER T_fin_semana AFTER UPDATE OF start_week ON fb_clients FOR EACH ROW BEGIN UPDATE fb_clients SET fin_semana = date(NEW.start_week, '+6 days') WHERE nombre = OLD.nombre; END;
补充说明
如果你的业务场景确实需要基于触发时的系统日期计算周结束日期,只需要把赋值部分替换为date('now', '+6 days')即可,不需要额外加其他语法标识。
内容的提问来源于stack exchange,提问作者KelvinJPS
相关产品推荐
相关产品推荐

