You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建判断已过期日期的SQL触发器,解决SELECT附近语法报错

SQLite触发器创建语法错误修复方案

你遇到的near "SELECT": syntax error报错,根因是WHEN子句中嵌套的子查询没有用小括号包裹,SQLite无法正确解析SELECT的语法边界。

只需要把WHEN条件里的SELECT语句整体用一对小括号包裹即可解决语法报错,修正后的代码如下:

CREATE TRIGGER IF NOT EXISTS DatesRepresentations
BEFORE INSERT ON Representations_base
WHEN(NEW.dateRep < (SELECT strftime('%d/%m/%Y %H:%M',datetime('now','localtime'))))
BEGIN
    SELECT RAISE(ABORT, ' Cannot insert a date already passed!');
END;

补充注意事项

  • 请确保你的dateRep字段存储格式和strftime输出的%d/%m/%Y %H:%M格式完全匹配,否则字符串对比会出现逻辑错误,比如10月和1月的字符串排序异常等问题。
  • 更推荐的实现方式是将时间字段以ISO标准格式(如%Y-%m-%d %H:%M)存储,直接对时间类型做对比,不需要额外格式化,逻辑更稳定,示例如下:
-- 推荐写法(要求dateRep为标准时间格式存储)
CREATE TRIGGER IF NOT EXISTS DatesRepresentations
BEFORE INSERT ON Representations_base
WHEN(NEW.dateRep < datetime('now','localtime'))
BEGIN
    SELECT RAISE(ABORT, ' Cannot insert a date already passed!');
END;

内容的提问来源于stack exchange,提问作者user16986383

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:21:00