我必须通过传递日期来从数据库中选择所有行.例如,获取日期为10/23/2012的所有行
在sqlite db中,我将其存储在DATE列中:
01/01/1900 11:00:00 AM
我试图通过使用date()获得但是我没有得到任何日期:
select itemId,date(dateColumn) from items
所以我只需要比较日期,但无法在sqlite中找到如何做到这一点.
解决方法
首先,将日期格式化为ISO-8601标准.将其包装在Date()中以确保将其作为DATE处理.最后,构建您的范围,以便包括从凌晨12:00开始到第二天凌晨12:00之前的所有内容.
select itemId,dateColumn from items where dateColumn >= date('2012-10-23') AND dateColumn < date('2012-10-23','+1 day')
SQLite列未键入.但是,如果将列与DATE进行比较(如图所示),则将列数据强制转换为日期(如果不是可强制的则为null)就足够了,并且比较将正常工作.
SQLFiddle上的示例:
create table items ( itemid,datecolumn); insert into items select 1,'abc' union all select 2,null union all select 3,'10/23/2012 12:23' union all select 4,'10/23/2012' union all select 5,'2012-10-23 12:23' union all select 6,'2012-10-23' union all select 7,'2012-10-24 12:23' union all select 8,'2012-10-24' union all select 9,date('2012-10-24 12:23') union all select 10,date('2012-10-24');
结果:
itemid datecolumn 5 2012-10-23 12:23 6 2012-10-23
请注意,虽然第3行和第4行似乎是日期,但它们不是,因为它们不符合ISO-8601格式,这是SQLite识别的唯一格式.