SQL在date之间select

我正在运行sqlite来select销售报告的两个范围之间的数据。 要select两个date之间的数据,我使用以下语句:

SELECT * FROM test WHERE date BETWEEN "11/1/2011" AND "11/8/2011"; 

这个声明抓住了所有的date,甚至那些标准以外的date。 您input的date格式与我找回的格式相同。 我不知道有什么问题,但感谢任何帮助,我可以find。 谢谢!

SQLLite要求date采用YYYY-MM-DD格式。 由于数据库中的数据和查询中的string不是这种格式,因此可能将string视为“date”。

将数据更改为该格式以使用sqlitedate时间格式 。

 YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS now DDDDDDDDDD SELECT * FROM test WHERE date BETWEEN '2011-01-11' AND '2011-08-11' 

在SQLite中selectdate的另一种方法是使用强大的strftime函数:

 SELECT * FROM test WHERE strftime('%Y-%m-%d', date) BETWEEN "11-01-2011" AND "11-08-2011" 

根据https://sqlite.org/lang_datefunc.html,这些是等同的:;

 date(...) strftime('%Y-%m-%d', ...) 

但如果你想要更多的select,你有它。

或者你可以把你的string转换为带date函数的date格式。 即使date在数据库中作为文本存储。 像这样(最可行的变体):

 SELECT * FROM test WHERE date(date) BETWEEN date('2011-01-11') AND date('2011-8-11') 
 SELECT * FROM TableName WHERE julianday(substr(date,7)||'-'||substr(date,4,2)||'-'||substr(date,1,2)) BETWEEN julianday('2011-01-11') AND julianday('2011-08-11') 

请注意,我使用格式: dd/mm/yyyy

如果使用d / m / yyyy,则在substr()更改

希望这会帮助你。

特别感谢杰夫和vapcguy你的互动真的很令人鼓舞。

这是一个更复杂的语句,当'/'之间的长度未知时,这个语句非常有用:

 SELECT * FROM tableName WHERE julianday( substr(substr(date, instr(date, '/')+1), instr(substr(date, instr(date, '/')+1), '/')+1) ||'-'|| case when length( substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1),'/')-1) )=2 then substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1), '/')-1) else '0'||substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1), '/')-1) end ||'-'|| case when length(substr(date,1, instr(date, '/')-1 )) =2 then substr(date,1, instr(date, '/')-1 ) else '0'||substr(date,1, instr(date, '/')-1 ) end ) BETWEEN julianday('2015-03-14') AND julianday('2015-03-16')