使用 SQLITE/Room table 列作为函数参数

Use SQLITE/Room table columns as function params

所以我遇到了以下方面:

sqlite dates

sqlite dates functions

这解释了如何在 SQLITE 中使用日期函数(这是 sql 中 dateadd 的等价物)

所以我想到了一个想法,将日期函数参数(间隔、值)存储在我想在触发器中使用的 table 中。 这有点像这样:

database.execSQL(
"CREATE TRIGGER IF NOT EXISTS tr_afMR " +
"AFTER INSERT ON Table1 " +
"BEGIN  " +
"UPDATE Table2 SET nextRepeatDate = date(nextRepeatDate,+interval repeatmentType)" +
"WHERE NEW.idTable2=Table2.idTable; " +
"END;");

在这种情况下 interval (= 1,2,..) 和 repeatmentType(DAY,MONTH,YEAR) 是 Table2 中的参数,但问题是 sqlite 无法将 table2 列识别为参数: '(', ')', '.', BETWEEN or IN expected, got 'repeatmentType'

甚至可以在 sqlite 中使用 table 列作为参数吗?还是这种功能只能在sql?

中实现

函数 date() 的第二个参数是一个字符串,您可以通过连接 intervalrepeatmentType:

来构造它
CREATE TRIGGER IF NOT EXISTS tr_afMR 
AFTER INSERT ON Table1 
BEGIN  
  UPDATE Table2 
  SET nextRepeatDate = date(nextRepeatDate, interval || ' ' || repeatmentType)
  WHERE idTable = NEW.idTable2; 
END;

表达式 interval || ' ' || repeatmentType 的计算结果类似于 '3 day'。不需要 + 符号。