如果SQLite
中的日期以ISO8601
格式存储,过滤日期的最简单方法是什么?
例如,我的数据库中的日期存储为(例如)2014-07-01T08:00:00.000+01:00
。
我正在运行查询以查看约会是否发生冲突。当我运行查询时:
select count(*) from Appointment where (EndDateTime > '2014-07-02 08:30' and StartDateTime < '2014-07-02 08:45')
这是一个简单的查询,以查看是否有任何其他约会开始/结束时间交叉到此约会。我知道有一个事实,即在这个查询中应该选择约会。例如,我的一个约会有以下列:
StartDateTime: 2014-07-02T08:00:00.000+01:00
EndDateTime: 2014-07-02T09:00:00.000+01:00
然而,即使我知道自己应该得到充足,我也没有结果。我确信在我的查询中如何过滤日期存在问题 - 任何想法?
答案 0 :(得分:5)
在查询中用于比较的文字不是部分ISO8601标记:
select count(*) from Appointment where (EndDateTime > '2014-07-02 08:30' and StartDateTime < '2014-07-02 08:45')
日期和时间之间缺少T
。比较文字时,比较将在'T'
与' '
之间停止,并且不会考虑时间部分。
您可以在格式模式中使用单引号输出文字T
,例如
yyyy-MM-dd'T'HH:mm