我正在使用SQLite DB而且我的“日期”列是VARCHAR
我需要在两个日期之间提取数据......
这是我试过的......
SELECT * FROM Table1 WHERE Date BETWEEN '14/03/2017 17:00:10' AND '16/03/2018 17:00:12'
SELECT * FROM Table1 WHERE strftime('%d/%m/%y %H:%M:%S', Date) BETWEEN strftime('%d/%m/%y %H:%M:%S','15/07/2016 20:00:09') AND strftime('%d/%m/%y %H:%M:%S','16/07/2017 21:00:09')
SELECT * FROM Table1 WHERE strftime('%d/%m/%y %H:%M:%S', Date) BETWEEN '2017/07/15 20:00:09' AND '2017/07/17 21:00:09'
知道我做错了吗?
答案 0 :(得分:2)
如果您有日期/时间列,那么只需执行:
SELECT t1.*
FROM Table1 t1
WHERE t1.Date >= '2017-03-14 17:00:10' AND
t1.Date < '2018-03-16 17:00:12';
对常量使用ISO / ANSI标准日期格式!
我强烈建议您不要将between
与日期/时间值一起使用。 Here是关于该主题的博客文章,尽管SQL Server适用于所有数据库。
答案 1 :(得分:1)
您无法使用SQLite的strftime
,因为它的格式化功能,它无法解析输入字符串。
基本上你有两个选择:
如果您可以依赖固定位置,则可以轻松解析字符串并将其格式化以符合支持的SQLite DateTime formats之一。在您的情况下,它可能如下所示:
SELECT [Date] FROM Table1 WHERE
DATETIME(printf('%04d-%02d-%02d %02d:%02d:%02d',
substr([Date], 7, 4), substr([Date], 4, 2), substr([Date], 1, 2),
substr([Date], 12, 2), substr([Date], 15, 2), substr([Date], 18, 2)))
BETWEEN '2017-07-15 20:00:05' AND '2017-07-17 21:00:09'
请注意,您还必须更改BETWEEN
的语法,以匹配其中一种支持的DATETIME
格式。