0

我有一张桌子:

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);

为什么?我正在使用 and BETWEEN and datetime() and date() 但它不起作用

4

1 回答 1

1

你的表情并没有像你想象的那样做任何事情。

SQLite 中没有 DATETIME 数据类型,因此您不会转换为 DATETIME,而是转换为其他类型(数字或 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),并非巧合的是,它可以用于这些类型的比较,而无需进行任何类型的转换或转换。

于 2013-10-29T00:01:07.620 回答