使用 SQLITE/Room table 列作为函数参数
Use SQLITE/Room table columns as function params
所以我遇到了以下方面:
这解释了如何在 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()
的第二个参数是一个字符串,您可以通过连接 interval
和 repeatmentType
:
来构造它
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'
。不需要 +
符号。
所以我遇到了以下方面:
这解释了如何在 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()
的第二个参数是一个字符串,您可以通过连接 interval
和 repeatmentType
:
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'
。不需要 +
符号。