SQLite插入数据时如何通过指定date1自动生成date1+10天的date2
解决SQLite插入时自动计算date2为date1+10天的问题
这个问题我之前也碰到过,你踩的坑其实是把字段名当成字符串传给date()函数了——SQLite会把'date1'当成一个字面量日期(而不是你刚插入的那个字段值),所以自然得不到想要的结果。下面给你两种可行的解决方案:
方案一:使用INSERT ... SELECT语法直接计算
如果你只是偶尔插入数据,不想修改表结构,可以用这种方式。把要插入的date1值同时作为date()函数的参数来计算date2:
INSERT INTO dates (date1, date2) SELECT '2012-01-01', date('2012-01-01', '+10 days');
如果是用参数化查询(比如在应用程序中),只需要把参数替换进去就行,比如:
INSERT INTO dates (date1, date2) SELECT ?, date(?, '+10 days');
这样第一个参数填你要的日期,第二个参数复用同一个值,就能自动算出date2。
方案二:创建触发器自动计算(更优雅)
如果需要频繁插入数据,不想每次都写计算逻辑,推荐用触发器来封装这个规则。创建一个BEFORE INSERT触发器,每次插入时自动把date2设为date1加10天:
CREATE TRIGGER trigger_auto_set_date2 BEFORE INSERT ON dates FOR EACH ROW BEGIN SET NEW.date2 = date(NEW.date1, '+10 days'); END;
创建好触发器后,你只需要插入date1的值就行,date2会自动生成:
INSERT INTO dates (date1) VALUES ('2012-01-01');
这种方式的好处是把计算逻辑放在数据库层面,不管从哪里插入数据,都能保证date2的规则一致,不用在应用代码里重复写逻辑。
内容的提问来源于stack exchange,提问作者Littlish
相关产品推荐
相关产品推荐

