Короче говоря, как добавить минуты к дате и времени из целого числа, расположенного в другой таблице, в одном операторе выбора, соединяя их в sqlite3?
У меня есть sqlite3 db с:
таблица P (int id, ..., int minutes)
и таблица S (int id, int p_id, datetime start)
Я хочу создать представление, которое дает мне PS (S.id, P.id, S.start + P.minutes), присоединяясь к S.p_id = P.id
Проблема в том, что если бы я генерировал запрос из приложения, я мог бы делать что-то вроде:
select datetime('2010-04-21 14:00', '+20 minutes');
2010-04-21 14:20:00
Создав строку «+20 минут» в приложении и передав ее в sqlite. Однако я не могу найти способ создать эту строку в самом выделении:
select p.*,datetime(s.start_at, formatstring('+%s minutes', p.minutes)) from p,s where s.p_id=p.id;
Поскольку sqlite, как говорится в документации, не предоставляет никакой функции форматирования строки, я также не вижу альтернативного способа выражения модификаторов даты.
В MySQL модификаторы даты не основаны на строках, поэтому на самом деле это работает:
mysql> create table p ( id integer, minutes integer);
mysql> create table s ( id integer, p_id integer, start datetime);
mysql> insert into p values (1, 10);
mysql> insert into p values (2, 15);
mysql> insert into s values (1, 1, '2008-12-31 14:00');
mysql> insert into s values (2, 1, '2008-12-31 15:00');
mysql> insert into s values (3, 2, '2008-05-10 13:30');
mysql> SELECT p.*,(s.start + INTERVAL p.minutes MINUTE) FROM p,s WHERE p.id=s.p_id;
+------+---------+---------------------------------------+
| id | minutes | (s.start + INTERVAL p.minutes MINUTE) |
+------+---------+---------------------------------------+
| 1 | 10 | 2008-12-31 14:10:00 |
| 1 | 10 | 2008-12-31 15:10:00 |
| 2 | 15 | 2008-05-10 13:45:00 |
+------+---------+---------------------------------------+
3 rows in set (0.02 sec)