我正在运行sqlite来为销售报告选择两个范围之间的数据。要从两个日期之间选择数据,我使用以下语句:
SELECT * FROM test WHERE date BETWEEN "11/1/2011" AND "11/8/2011";
此声明会抓取所有日期,即使是那些超出标准的日期。您看到输入的日期格式与我返回的格式相同。我不确定什么是错的,但感谢我能找到的任何帮助。谢谢!
答案 0 :(得分:84)
SQLite要求日期为YYYY-MM-DD
格式。由于数据库中的数据和查询中的字符串不是那种格式,因此可能会将“日期”视为字符串。
答案 1 :(得分:28)
将您的数据更改为格式以使用sqlite datetime formats。
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'
答案 2 :(得分:12)
在SQLite中选择日期的另一种方法是使用强大的 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', ...)
但是如果你想要更多的选择,你就拥有它。
答案 3 :(得分:4)
或者您可以使用日期功能将字符串转换为日期格式。甚至日期也作为TEXT存储在DB中。 像这样(最可行的变体):
SELECT * FROM test WHERE date(date)
BETWEEN date('2011-01-11') AND date('2011-8-11')
答案 4 :(得分:3)
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()
希望这会对你有所帮助。
答案 5 :(得分:1)
当'/'之间的长度为unknown ::
时,这是一个更复杂的语句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')
答案 6 :(得分:0)
SQLite 没有日期的概念。它只知道它们是文本。当您在 SQLite 中执行此操作时,您实际上是在进行字符串比较。您可以从 official documentation 中阅读更多内容。
<块引用>当比较两个 TEXT 值时,会使用适当的整理顺序来确定结果。
填充日期的任何数字(即,不使用像“May”这样的词)格式以及从最大字段到最小字段的顺序都可以使用。 “2021-05-07”(5 月 7 日)在“2021-05-09”(5 月 9 日)之前。因此,如果您使用“yyyy-mm-dd”格式,那么您将被设置。 "yyyy/mm/dd" 和 "yyyymmdd" 也工作得很好。 (有关“可排序”日期格式的更好措辞,请查看 RFC 3339 section 5.1。)
使用“yyyy-mm-dd”格式的一个原因是因为这是 SQLite 的内置 date
使用的格式。