[英]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.