我必须通过传递日期来从数据库中选择所有行。例如,获取日期为10/23/2012
在 sqlite db 中,我将其存储在DATE
列中:
01/01/1900 11:00:00 AM
我试图使用date()
,但我没有得到任何日期:
select itemId, date(dateColumn) from items
所以我只需要比较日期,但无法在sqlite中找到如何做到这一点。
答案 0 :(得分:5)
首先,将日期格式设置为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的。
答案 1 :(得分:4)
在SQLite中,没有数据类型DATE
,它存储为字符串。因此,字符串必须与完全匹配才能相等。
由于我们不希望这样,你需要将值从“日期 - 列”“转换”为伪日期,并将你的参数转换为伪日期,因此可以对它们进行比较:
SELECT itemId FROM items WHERE date(dateColumn) = date("2012-10-22");
请注意,date-command将日期格式化为YYYY-MM-DD
,如this older question的答案中所述。问题还表明,您可以使用BETWEEN x AND y
- 命令获取匹配范围的日期。
答案 2 :(得分:0)
SELECT itemId,dateColumn FROM items WHERE dateColumn=date('YYYY-MM-DD HH:MM:SS');
答案 3 :(得分:0)
从项目中选择itemId,dateColumn 其中dateColumn = @date