2010-12-15 147 views
2

我一直在寻找如何做到这一点,但没有提出明确的答案(也许我的资源不是很好)。我需要做一个SQLite查询来从SQLite数据库的两个日期之间检索数据。SQLite,根据日期进行查询

我想这一点:

SELECT CONTACTNAME 
FROM SHIPMENT 
WHERE DATECREATED 
BETWEEN date('11-15-2010') 
AND date('12-25-2010'); 

的数据是在我的SQLite数据库为:

CONTACTNAME=VARCHAR 
DATECREATED=date (format: "11/22/2010") 

回答

3

尝试仅仅取消日期():

SELECT CONTACTNAME 
FROM SHIPMENT 
WHERE DATECREATED 
BETWEEN '2010-11-15' 
AND '2010-12-25' 
+0

好的,谢谢,不知道为什么我读的教程里面有那个 – Rick 2010-12-15 18:11:31

+2

这只适用于YYYY-MM-DD的日期顺序。 – dan04 2010-12-15 22:34:18

+0

@ dan04,你能澄清“那个”吗?我尝试了我自己的SQLite数据库上面使用的代码,使用MM-DD-YYYY命令,所以我想知道是否引用date()或者SQLite版本中可能与读取此问题的其他人有关的区别:) – 2010-12-16 20:58:59

13

SQLite没有日期类型。您可以将日期存储为字符串,但您需要使用YYYY-MM-DD日期订单,不是 MM-DD-YYYY。主要有两大原因:

(1)正确的顺序

随着YYYY-MM-DD日期,词典顺序相同的时间顺序,这使得<>BETWEEN运营商按预期工作。

这是而不是 MM-DD-YYYY日期的情况。对日期BETWEEN '11-15-2010' AND '12-25-2010'的查询将错误地匹配'11-22-1963''12-21-2012'

(2)与SQLite date and time functions兼容。

它们同时接受字符串和数字(​​Julian)日期,但是如果将字符串传递给这些函数中的任何一个,则必须具有YYYY-MM-DD顺序。

1
SELECT field_1,field_2,date_field 
WHERE julianday(date_field) 
BETWEEN julianday('1998-01-01') and julianday('2008-01-01'); 
+3

如果你解释了你发布的代码,它会更好。 – 2012-10-28 00:43:26