簡體   English   中英

選擇日期范圍,過去 30 天

[英]Select date range, last 30 days

我試圖只返回查詢的最后 30 天,但沒有成功。 我試着把它簡化為只拉任何東西 > 12/31/2019 仍然沒有成功。

sql_string = ('''SELECT ViewListInvoices.Department, 
            ViewListInvoices.[Invoice Date]
            FROM ViewListInvoices
            WHERE (((ViewListInvoices.[Invoice Date] > (12/31/2019))
            ))''')

    sql_result = query(sql_string)
    shop_average_inv_last_month = sorted(sql_result)
    sql_result =[]

我已經嘗試過> ('12/31/2019')('#12/31/2019')以及其他一些。

在此先感謝您的幫助。

對日期常量使用正確的語法:

ViewListInvoices.[Invoice Date] > '20191231'

使用DATEFROMPARTS函數創建日期文字

我喜歡使用DATEFROMPARTS函數在 TSQL 中創建日期文字。 這確實需要 SQL Server 2012 或更高版本(這對大多數人來說應該不是問題)。

雖然鍵入此函數可能需要一兩秒鍾的時間,但一旦它出現,我就會發現代碼更具可讀性,而且我不必擔心語言和日期格式設置(例如,看看這篇文章)。

以下是您的作業的外觀(我刪除了很多括號):

sql_string = ('''SELECT ViewListInvoices.Department, 
            ViewListInvoices.[Invoice Date]
            FROM ViewListInvoices
            WHERE ViewListInvoices.[Invoice Date] > DATEFROMPARTS(2019,12,31) 
            ''')

有些人喜歡依賴字符串的隱式轉換,就像 Gordon 演示的那樣(在 TSQL 中很常見)。

我還看到一些人使用CAST函數(尤其是 2012 之前的 SQL Sever)。

sql_string = ('''SELECT ViewListInvoices.Department, 
            ViewListInvoices.[Invoice Date]
            FROM ViewListInvoices
            WHERE ViewListInvoices.[Invoice Date] >  CAST(''20191231'' AS DATE)''')

假設您想要上次發票日期的最后 30 天,請使用 max subquery 和 dateadd

 SELECT ViewListInvoices.Department, 
        ViewListInvoices.[Invoice Date]
        FROM ViewListInvoices
        where ViewListInvoices.[Invoice Date]>=
        DateAdd(d,-30,
        (
        SELECT max(ViewListInvoices.[Invoice Date]) max_date
        FROM ViewListInvoices invoice2
        ))

或者,如果您希望所有日期大於 12/31/2019,請使用將自動轉換為強制轉換的字符串('12/31/2019' as date)

  SELECT ViewListInvoices.Department, 
        ViewListInvoices.[Invoice Date]
        FROM ViewListInvoices
        where ViewListInvoices.[Invoice Date]>= '12/31/2019' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM