【问题标题】:How to properly query/format dates如何正确查询/格式化日期
【发布时间】:2019-04-17 18:58:34
【问题描述】:

我正在尝试使用 python 为我的 SQlite 数据库构建一个函数。该函数的目的是在calibration_date字段下提取距离当前日期1到5天的任何日期。

我尝试在表格本身上弄乱我的格式,认为这是格式问题。该函数仍然没有任何结果。

def datecheck():
    conn = sqlite3.connect("Calibration_Monitor.db")
    cur = conn.cursor()
    cur.execute("SELECT Serial, Calibration_Date from Masterlog where date(Calibration_Date) < (SELECT DATETIME('now', '+5 days'))")
    print(cur.fetchall())
    conn.commit()
    conn.close()

希望有人能帮我解开这个谜!

任何帮助:)

【问题讨论】:

  • 你是什么意思calibration_date field that is 1 to 5 days away from the current。 calibration_date 是过去还是将来的日期???如果过了日期,那么您应该从当前日期减去 5 天,然后与数据库日期进行比较。

标签: python sqlite


【解决方案1】:

如果列格式为日期列,则应引用不带date() 的日期,否则应使用date(Calibration_Date)

另外,要获得第二部分,您不需要额外的SELECT。请参阅下面的修复和this answer 了解更多信息。

def datecheck():
    conn = sqlite3.connect("Calibration_Monitor.db")
    cur = conn.cursor()
    cur.execute("SELECT Serial, Calibration_Date FROM Masterlog WHERE Calibration_Date < date('now', '+5 days')")
    print(cur.fetchall())
    conn.commit()
    conn.close()

现在,如果您的意思是日期 BETWEEN 1 天和 5 天后,而不是 任何日期 5 天后,您会想要使用类似:

cur.execute("SELECT Serial, Calibration_Date FROM Masterlog WHERE Calibration_Date BETWEEN date('now') AND date('now', '+5 days')")

编辑: 如果您打算使用过去的日期而不是未来的日期,则应将其更改为 +5 days

【讨论】:

  • 我认为-5 因为日期应该是过去的。
  • 我认为这有点像日历功能,他想知道未来 5 天内发生的事情,因此日期是未来,这意味着 +5 实际上是正确的。
  • 好的。太棒了
【解决方案2】:

如果您的 Calibration_Date 日期已过,请使用 -5 而不是 +5。 (根据我上面的评论)。这将为您提供过去 5 天之前的所有记录。

.......where date(Calibration_Date) < date('now','-5 day')

类似:

SELECT Serial, Calibration_Date from Masterlog where date(Calibration_Date) < date('now','-5 day')

如果您想要过去五天的数据

SELECT Serial, Calibration_Date FROM Masterlog WHERE Calibration_Date BETWEEN date('now') AND date('now', '-5 days')

【讨论】:

    猜你喜欢
    • 2012-02-15
    • 2021-06-05
    • 2013-09-18
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2014-11-08
    相关资源
    最近更新 更多