我在SQLite数据库的表(历史记录)中有两个文本列( valid_from 和 valid_to )。 dd / MM / yyyy 格式。
现在我正在运行以下查询以获取 2018年6月1日至2018年6月30日之间的所有记录,但没有得到任何结果:
尝试1:
SELECT * FROM history WHERE valid_from >= datetime('01/06/2018') AND valid_to <= datetime('30/06/2018');
尝试2:
SELECT * FROM history WHERE cast(strftime('%Y%m%d', valid_from) as integer) >= cast(strftime('%Y%m%d', '01/06/2018') as integer) AND cast(strftime('%Y%m%d', valid_to) as integer) <= cast(strftime('%Y%m%d', '30/06/2018') as integer);
没有任何记录。我想念什么吗?
答案 0 :(得分:2)
您应该始终将日期信息以ISO格式存储在SQLite中,其中年份在月份之前,月份在日期之前。原因是在SQLite中日期仅以纯文本格式存储,并且您当前的格式无法正确排序。解决方法是,您可以尝试以下查询:
SELECT *
FROM history
WHERE
SUBSTR(valid_from, 7, 4) || '/' || SUBSTR(valid_from, 4, 2) ||
'/' || SUBSTR(valid_from, 1, 2)
BETWEEN '2018/06/01' AND '2018/06/30';
在这里,我们只是为每个日期构建正确的日期格式。但是,最好的长期解决方案是修复您的日期数据。