【问题标题】:Query between dates in SQLITESQLITE中日期之间的查询
【发布时间】:2016-06-25 03:59:57
【问题描述】:

我正在尝试查询今天和昨天之间发生的事情。例如,在 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-06-24' 选择日期('现在') '2016-06-24' 选择日期('现在','-1天') '2016-06-23' 选择日期('2016-6-24','-1 天') 无

我做错了什么?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    你需要改变:AND strftime('%Y-%M-%D','2016-6-16','+1 day') for AND strftime('%Y-%m-%d','2016-06-16','+1 day')。

    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

    【讨论】:

    • 我最初插入的数据不正确,所以我将 TEXT 字段查询为 DATE 字段,但没有给出任何结果。即使该列被声明为 DATE... 就 sqlite3 而言,这确实是 TEXT
    【解决方案2】:

    好吧,我完全错了。

    我的方案是这样的:

     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 的时间查询都能正常工作。

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多