2010-05-01 25 views
2

總之,如何分鐘增加從位於另一個表整數的日期時間,在一個select語句,通過加入他們,在sqlite3的?在視圖中連接兩個表時sqlite3的日期操作?

我有一個sqlite3的分貝:

表P(INT ID,...,詮釋分鐘) 和表S(INT ID,INT的p_id,日期時間開始)

我想以產生一個觀點,即通過接合S.p_id = P.id

給我PS(S.id,P.id,S.start + P.minutes)的問題是,如果我生成從所述查詢應用程序,我可以做的東西,如:

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) 

回答

2

串聯使用+沒有工作。然而||串聯操作數確實按預期工作。

所以MySQL的

SELECT p.*,(s.start + INTERVAL p.minutes MINUTE) FROM p,s WHERE p.id=s.p_id; 

可以寫成sqlite3的是:

select p.*, datetime(s.start, '+' || p.minutes || ' minutes') from p, s where s.p_id=p.id; 

將會產生正確的答案。感謝newtover指出正確的方向。

1|10|2008-12-31 14:10:00 
1|10|2008-12-31 15:10:00 
2|15|2008-05-10 13:45:00 
1

爲什麼不直接使用串聯?:

SELECT ('+' + 10 + ' minutes') 
+0

連接似乎是要走的路。然而,+不是正確的運算符,它產生了一個空的結果。 – duncan 2010-05-01 21:54:42

+0

+是數字加法。你必須使用||用於字符串連接。 – dan04 2010-05-02 17:09:19

+0

@duncan和@ dan04:我不知道如何正確操作,謝謝。 – newtover 2010-05-02 19:42:19