在SQLITE中查询日期

时间:2016-06-24 18:28:19

标签: sqlite

我试图查询今天和昨天之间发生的事情。例如,在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

我做错了什么?

2 个答案:

答案 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不是有效的数据类型。它实际上是INTEGERTEXT周围的高级包装器,具体取决于放入其中的数据。 Sqlite3默认为TEXT

这意味着当我执行类似于:

的插入/更新时
  date_time = '2016-6-16'

这是有效的,因为date_time确实是TEXT而不是DATE。当我预先形成使用DATE数据类型的搜索时,它将跳过任何不是DATE的行。

长版是。我将~250MB格式错误地插入到此表中。修复我的测试和功能后,我的插入总是有2天/月的数字,OP的大部分时间查询都能正常工作。