sqlite找出日期差异

时间:2018-09-29 15:42:39

标签: sqlite

我有这样的桌子:

CREATE TABLE `item_zone` (
    `item`  INTEGER NOT NULL,
    `zone`  INTEGER NOT NULL,
    `action_date`   TEXT NOT NULL,
    `price` INTEGER NOT NULL,
    `days_price_established`    INTEGER
);
INSERT INTO `item_zone` VALUES (50374500, 1, 1512248400, 5, 10);
INSERT INTO `item_zone` VALUES (50374500, 1, 1513112400, 9, 1);
INSERT INTO `item_zone` VALUES (50374500, 1, 1513198800, 8, null);

表没有一些主键,但是我认为可以使用oid。 在action_date中,它存储类似UNIX的数据,而在days_price_built中,它存储上次价格更改后剩余的天数(action_data(n)-action_data(n-1)。我需要显示days_price_estableshed,但我不知道如何使用属性进行数学运算日期。

1 个答案:

答案 0 :(得分:0)

显示价格修改日期:

select strftime('%d-%m-%Y', datetime(action_date-(86400*days_price_established), 'unixepoch')) from item_zone;

显示上次修改价格的日期:

select strftime('%d-%m-%Y', datetime(action_date-(86400*days_price_established), 'unixepoch')) from item_zone;

要计算已建立的天数

select item,action_date,round((iz1.action_date-(SELECT iz2.action_date FROM item_zone iz2 WHERE iz2.oid<iz1.oid AND iz2.item=iz1.item ORDER by iz2.oid DESC limit 1))/86400) from item_zone iz1 order by iz1.oid;

如果表中已建立的days_price_price为空,则更新

update item_zone set days_price_established=(select round((iz1.action_date-(SELECT iz2.action_date FROM item_zone iz2 WHERE iz2.oid<iz1.oid AND iz2.item=iz1.item ORDER by iz2.oid DESC limit 1))/86400) from item_zone iz1 WHERE iz1.oid=item_zone.oid) WHERE days_price_established IS NULL;