2011-11-18 47 views
2

我在表tbl中有一列c,其中包含以下值。SQLite中的日期函數不會選擇數據庫中的行

Tue, 15 Nov 2011 14:21:32 GMT 
Tue, 15 Nov 2011 12:59:21 GMT 
Tue, 15 Nov 2011 12:15:48 GMT 
Tue, 15 Nov 2011 12:10:33 GMT 
Tue, 15 Nov 2011 11:12:09 GMT 
Tue, 15 Nov 2011 11:09:14 GMT 
Tue, 15 Nov 2011 10:38:01 GMT 
Tue, 15 Nov 2011 10:36:33 GMT 
Tue, 15 Nov 2011 10:09:21 GMT 
Tue, 15 Nov 2011 09:23:01 GMT 
Tue, 15 Nov 2011 08:24:39 GMT 
Mon, 14 Nov 2011 22:44:53 GMT 
Mon, 14 Nov 2011 21:03:28 GMT 
Mon, 14 Nov 2011 20:12:11 GMT 
Mon, 14 Nov 2011 19:08:34 GMT 
Mon, 14 Nov 2011 18:40:05 GMT 
Mon, 14 Nov 2011 18:07:00 GMT 
Mon, 14 Nov 2011 18:04:00 GMT 
Mon, 14 Nov 2011 17:37:45 GMT 

這些值是從命令採取:

select c from tbl;

當我運行:

select count(*) from tbl where c < date('2011-11-18');

結果是0

這裏有什麼問題?

謝謝

+0

該列中的值是字符串還是日期? –

回答

2

什麼你已經存儲在數據庫中的常規字符串,而不是SQLite的日期時間字符串。

對於要識別爲日期時間的TEXT列的內容,它必須以格式YYYY-MM-DD HH:MM:SS.SSS存儲。爲了得到你想要的數據結果,你必須使用字符串比較,並且做比較,你想要比較棘手(你需要檢查子字符串並尋找year < 2011 OR month IN (JAN,FEB,MAR. . .) OR (month = 'NOV' AND day < 18)。

  1. 尋找到的數據被插入,並改變它插入一個「正確」的SQLite的日期和

  2. 運行在現有的數據一次性程序來進行格式化:

    更好。

+0

你可以重新格式化c列中的字符串來更正日期函數的字符串嗎?我可以選擇格式不正確的所有字符串嗎? – xralf

+0

它看起來像所有字符串都不是日期格式,但可以通過確保字符串的第一個字符是非數字來進行選擇。你可以寫一個UPDATE語句來重新設置日期。你需要的子串很容易,除非你需要一個CASE語句來翻譯JAN - > 1,FEB - > 2等。 –

2

首先,你必須做的日期字符串一些處理,加入到數據庫之前。基本上它應該只包含:年,月,日,小時,分,秒,毫秒(可選)。所有的數據都以數字的形式出現,沒有字符串應該放在裏面。

我創建了小桌子:

> sqlite3 ':memory:' 
sqlite> CREATE TABLE tbl (c text); 
sqlite> INSERT INTO tbl (c) VALUES ('2011-11-15 14:21:32'); 
sqlite> INSERT INTO tbl (c) VALUES ('2011-11-15 12:59:21'); 
sqlite> INSERT INTO tbl (c) VALUES ('2011-11-15 12:15:48'); 
sqlite> INSERT INTO tbl (c) VALUES ('2011-11-15 12:10:33'); 
sqlite> INSERT INTO tbl (c) VALUES ('2011-11-15 11:12:09'); 
sqlite> INSERT INTO tbl (c) VALUES ('2011-12-15 11:12:09'); 

sqlite> SELECT strftime('%Y-%m-%d %H:%M:%S', c) FROM tbl WHERE strftime('%Y-%m-%d %H:%M:%S', c) < strftime('%Y-%m-%d', '2011-12-15');

給了我很好的結果:

2011-11-15 14:21:32 
2011-11-15 12:59:21 
2011-11-15 12:15:48 
2011-11-15 12:10:33 
2011-11-15 11:12:09 
相關問題