【问题标题】:Use SQLITE/Room table columns as function params使用 SQLITE/Room 表列作为函数参数
【发布时间】:2021-09-08 06:42:49
【问题描述】:

所以我遇到了以下方面:

sqlite dates

sqlite dates functions

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

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

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 中的表列作为参数?还是这种功能只能在sql中实现?

【问题讨论】:

    标签: sqlite date triggers android-sqlite android-room


    【解决方案1】:

    函数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' 的值。不需要+ 符号。

    【讨论】:

    • 效果很好,谢谢。在这种情况下,是否可以乘以区间值?像:interval *7 if repeatmentType 是 WEEK 因为日期不支持“周”,仅支持其他日期类型,如日、月等。
    • @FunnyMoments no WEEK 不受支持。你可以做的是:date(nextRepeatDate, (7*interval) || ' ' || repeatmentType).
    猜你喜欢
    • 2011-06-26
    • 2014-05-03
    • 2020-10-07
    • 2021-09-19
    • 2023-01-22
    • 2018-08-10
    • 2013-05-11
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多