2016-03-30 49 views
0

在我的程序中,我有一張表格,裏面保存輸入作業的詳細信息以及從中獲得的金額。如何從當前日期和每年的固定日期之間的表中選擇值?

我應該能夠從DATEBANK位於當前日期和每年的固定日期之間的工作中選擇金額:財務年度開始。

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

我成功地獲得了當前日期和特定年份的財政年度開始(例如01/02/2016)。

但是,當我使用較晚或前幾年的日期時,這不會影響。

如何挑選最近的「01/02」來比較當前日期?

+0

什麼是您的日期格式?字符串是'MM/DD/YYYY'嗎? –

+0

不,它是格式爲YYYY-MM-DD的日期時間對象。我已經成功完成了一些日期操作。我只是不知道如何選擇當前日期和財政年度開始之間的金額。 –

+0

我不太明白。看起來您希望選擇您選擇的_日期_和_chosen date_對應的財務年度開始之間的金額。我對嗎? –

回答

0

如果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)) 

請注意,提供參數更容易和更安全作爲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)) 
+0

我不認爲SQLite有'YEAR()'函數。 – glibdud

+0

@glibdud:感謝您的糾正。我用['strftime('%Y',DATEBANK)'](https://www.sqlite.org/lang_datefunc.html)替換了它。 – unutbu

相關問題