【问题标题】:How do I select values from a table between the current date and a fixed date each year?如何从当前日期和每年固定日期之间的表中选择值?
【发布时间】:2016-03-30 21:00:57
【问题描述】:

在我的程序中,我有一个表格,其中包含有关输入的工作以及从中获得的金额的详细信息。

我应该能够从 DATEBANK 介于当前日期和每年固定日期之间的工作中选择金额:财政年度的开始。

c.execute("SELECT AMOUNT FROM vatsum1 WHERE DATEBANK BETWEEN '{x}' AND '{y}'".\
                    format(y = DateBankCur, x = StrtFYear))    

我已设法获得当前日期罚款和特定年份的财政年度开始(例如 01/02/2016)。

但是当我使用以后或前几年的日期时,这不会成立。

如何选择最近的“01/02”与当前日期进行比较?

【问题讨论】:

  • 你的日期格式是什么?是字符串'MM/DD/YYYY'吗?
  • 不,它是一个日期时间对象,格式为:YYYY-MM-DD。我已经成功地完成了一些日期操作。我只是不知道如何在当前日期和财政年度开始之间选择金额。
  • 我不太明白。您似乎想在您选择的日期和对应于选择的日期的财政年度开始之间选择金额。我说的对吗?
  • 您是否正在寻找与“在当前年份生成所需日期,然后如果在未来,则减去一年”不同的内容?

标签: python python-3.x sqlite


【解决方案1】:

如果StrtFYear是表示年份的整数,则可以使用

选择DATEBANK的年份大于或等于该年份的所有记录
strftime('%Y', DATEBANK) >= ?

例如,

import datetime as DT
StrtFYear = 2015
DateBankCur = DT.date.today()
c.execute(
    "SELECT AMOUNT FROM vatsum1 WHERE strftime('%Y', DATEBANK) >= ? AND DATEBANK <= ?", 
    (StrtFYear, DateBankCur)) 

请注意,提供参数(StrtFYear, DateBankCur) 作为c.execute 的第二个参数比尝试使用自己的字符串格式引用参数更容易、更安全。它更安全,因为它不易受到SQL injection 的攻击。


如果StrtFYear 是Python datetime.date,那么您可以使用StrtFYear.year 获得整数年份。在这种情况下,您可以使用

c.execute(
    "SELECT AMOUNT FROM vatsum1 WHERE strftime('%Y', DATEBANK) >= ? AND DATEBANK <= ?", 
    (StrtFYear.year, DateBankCur)) 

【讨论】:

  • 我认为 SQLite 没有YEAR() 函数。
  • @glibdud:感谢您的更正。我已将其替换为 strftime('%Y', DATEBANK)
猜你喜欢
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多