SQLLITE
QUERY
SELECT issue_date as count FROM tablename where issue_date >= "08/08/2016" and issue_date < "09/01/2016"
结果
“2017年8月8日”
“2017年8月11日”
“2017年8月18日”
“2017年8月18日”
“2017年8月22日”
“2017年8月22日”
“2017年8月28日”
“2017年8月31日”
创建查询
CREATE TABLE tablename( issue_date datetime text not null }
插入查询
INSERT INTO tablename(issue_date)值(“08/31/2017”);
答案 0 :(得分:1)
您以非ANSI兼容格式存储日期。由于SQLite中没有正式的日期类型,并且所有日期基本上都存储为字符串,因此您当前的日期比较将表现和排序,就像您要与文本进行比较一样。它不起作用,因为你先是月份,然后是白天,然后是年份。要使日期的文本比较正常工作,请使用以下格式:
yyyy-mm-dd
您应该更改用于存储日期的格式,但是一种解决方法是以正确的格式构建发布日期,然后进行比较,也使用相同格式的日期字符串进行比较:
SELECT
issue_date AS count
FROM tablename
WHERE
SUBSTR(issue_date, 7, 4) || '-' ||
SUBSTR(issue_date, 1, 2) || '-' ||
SUBSTR(issue_date, 4, 2) BETWEEN '2016-08-08' AND '2016-09-01'
答案 1 :(得分:0)
SQLite的data types没有真正的DATETIME类型。它只有NULL,INTEGER,REAL,TEXT和BLOB。任何其他类型都转换为这些类型,因此它在您的情况下正在做的是将这些值存储为字符串,并将其作为字符串进行比较。
我个人更喜欢将日期存储为UNIX时间戳(因此是整数),以避免使SQL查询复杂化并简化整个过程(尽管数据库中的值将变得不那么易读)。
答案 2 :(得分:-1)
因为您使用AND指定了查询。所以它匹配您的查询。使用BETWEEN表达式。
expression BETWEEN value1 AND value2;