我试图查询今天和昨天之间发生的事情。例如,在2016年6月17日,它看起来像:
SELECT * FROM Inspection_Log WHERE date_time BETWEEN '2016-6-16' AND '2016-6-17'
但是这些日子是相对的,明天就不会有工作,或者真的再说一遍。我已经遇到了this页面,现在告诉我使用DATE
,因为它只是strftime
周围的礼貌包装。
但这是我目前的问题:
此查询有效:
>SELECT COUNT(*) FROM Inspection_Log WHERE date_time BETWEEN '2016-6-16' AND '2016-6-17'
535
但是当我使用date('yada', '+1 day')
>SELECT COUNT(*) FROM Inspection_LOG WHERE date_time BETWEEN '2016-6-16' AND DATE('2016-6-16','+1 day')
0
所以我尝试使用strftime
>SELECT COUNT(*) FROM Inspection_LOG WHERE date_time BETWEEN '2016-6-16' AND strftime('%Y-%M-%D','2016-6-16','+1 day')
0
所以我尝试使用datetime
>SELECT COUNT(*) FROM Inspection_LOG WHERE date_time BETWEEN '2016-6-16' AND datetime('2016-6-16','+1 day')
0
我在这里深入研究这个问题 选择时间('现在') ' 2016年6月24日' 选择日期('现在') ' 2016年6月24日' 选择日期('现在',' -1天') ' 2016年6月23日' 选择日期(' 2016-6-24',' -1天') NONE
我做错了什么?
答案 0 :(得分:1)
您需要更改:AND strftime('%Y- %M-%D ','2016- 6 -16','+ 1天')对于AND strftime('%Y- %m-%d ','2016- 06 -16','+ 1天')。
1 - 您应该使用'%Y-%m-%d'作为第一个参数'YYYY-MM-DD'。 格式字符串支持在标准C库的strftime()函数中找到的最常见的替换,以及两个新的替换,%f和%J。 The complete list link
2 - 时间字符串必须遵循以下格式:YYYY-MM-DD,然后您需要使用'2016-06-16'。
有一个问题和答案:SQL Select between dates
答案 1 :(得分:0)
好的,所以我完全错了。
我的计划如下:
CREATE TABLE InspectionLog(
date_time DATE,
station_name TEXT,
inspection TEXT,
barcode_part_number TEXT,
bus_part_number TEXT,
barcode_serial_number TEXT,
bus_serial_number TEXT,
rework_operation TEXT,
status TEXT,
ng_description TEXT
)
DATE
不是有效的数据类型。它实际上是INTEGER
和TEXT
周围的高级包装器,具体取决于放入其中的数据。 Sqlite3默认为TEXT
。
这意味着当我执行类似于:
的插入/更新时 date_time = '2016-6-16'
这是有效的,因为date_time
确实是TEXT
而不是DATE
。当我预先形成使用DATE
数据类型的搜索时,它将跳过任何不是DATE
的行。
长版是。我将~250MB格式错误地插入到此表中。修复我的测试和功能后,我的插入总是有2天/月的数字,OP的大部分时间查询都能正常工作。