SQLite不适用于两个日期

时间:2013-10-28 23:46:58

标签: sqlite date select where

我有一张桌子:

create table snapshot_info (r_object_id text, 
date_snapshot date, 
version text,
ka_regnum_or_type text,
ka_registration_date date, 
ka_doc_kind text, 
ka_title text, 
ka_author_name text,
ka_addressee text,
ka_state_name_ru text,
ka_out_number text,
ka_visa_real_authors_s text,
 ka_type_object text) ;

包含字段date_snapshot

中的记录
07.10.2013 10:56:58 | 
07.10.2013 10:58:23 | 
15.10.2013 01:00:42 | 
16.10.2013 14:54:33 | 
16.10.2013 23:12:23 | 
17.10.2013 11:12:36 | 
17.10.2013 10:43:47 | 
18.10.2013 10:19:36 | 

如果我运行查询

select r_object_id, version from snapshot_info where date_snapshot >= CAST('02.01.2010 00:00:00' AS datetime);

我得到了所有记录,这很好 但如果我用两个日期运行查询我无法获得所有记录

select r_object_id, version from snapshot_info where date_snapshot >= CAST('02.01.2010 00:00:00' AS datetime) and date_snapshot < CAST('12.12.2013 00:00:00' AS datetime);

为什么呢?我使用和BETWEEN和datetime()和date()但它不起作用

1 个答案:

答案 0 :(得分:1)

你的表达并没有像你认为的那样远程做任何事情。

SQLite中没有DATETIME数据类型,因此您不会转换为DATETIME,而是转换为其他内容(Numeric或NONE)。当我尝试你的演员时:

 SELECT cast('12.12.2013 14:23:01' as datetime);

从SQLite命令行,我得到12.12。将其与date_snapshot字段中的字符串值进行比较,SQLite将返回结果。

此外,您使用的日期格式不是SQLite即使在其日期和时间函数中也能识别的日期格式。

最好的解决方案是使用SQlite的“标准”字符串日期时间表示(YYYY-MM-DD HH:MM:SS),这并非巧合,可用于这些类型的比较,而无需进行任何类型的转换或转换。