2009-08-24 73 views
3

數據庫被創建得很好,插入工作得很好。我在下面的select語句中遇到問題。它不返回任何記錄並且沒有錯誤。任何其他領域的選擇工作得很好。任何人都可以發現我做錯了什麼嗎?iPhone SQLite日期問題

"create table if not exists data (pkey integer primary key, doc date)" 

[db executeUpdate:@"insert into data (doc) values (?)" , [NSDate date]]; 

"select * FROM data WHERE doc between '2009-08-23' and '2009-08-23' " 
+0

我想使用FMDatabase訪問,但我使用GUI輸入記錄,每次我都沒有得到任何記錄。請檢查我的問題,並建議:http://stackoverflow.com/questions/8772601/date-entry-into-database-through-gui-for-date-which-is-readable-by-fmdatabase – 2012-01-07 20:01:55

回答

10

的部分between '2009-08-23' and '2009-08-23'永遠是假的,因爲這是零時間的範圍,缺乏一個更好的描述。

如果您希望發生在2009-08-23的項目,請選擇between '2009-08-23' and '2009-08-24',範圍從23日午夜到24日午夜。

下面是這個動作的例子:

sqlite> CREATE TABLE t (d DATETIME); 
sqlite> SELECT DATETIME('now'); 
2009-08-24 02:32:20 
sqlite> INSERT INTO t VALUES (datetime('now')); 
sqlite> SELECT * FROM t; 
2009-08-24 02:33:42 
sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-24'; 
sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-25'; 
2009-08-24 02:33:42 
2

我不得不做的SQLite查找這個確切類型,這裏是一個簡單的日期格式例如獲得一天的時間戳的開始和結束你的日期。

在我的情況下,我將這個時間戳格式的時間戳存儲在sqlite中:「yyyy-MM-dd HH:mm:ss.SSSS」。本示例使用當前日期([NSDate date])。

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
NSDate *startOfDay = [dateFormatter dateFromString:dateString]; 
// add a full day and subtract 1 second to get the end of day timestamp 
NSDate *endOfDay = [startOfDay addTimeInterval:(60*60*24)-1]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSS"]; 

然後,您可以使用startOfDay和endOfDay作爲查詢值。

+0

感謝您的解決方案。很棒! – Jordan 2009-08-24 19:01:40

1

SQLite做字符串比較,不是日期比較。

所以,解決你的問題的一個方法是:

「SELECT * FROM數據,其中 '2009-08-23' 和 '2009-08-23 99' 之間的文檔」