3 回答

TA貢獻1785條經驗 獲得超8個贊
使用該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)''')

TA貢獻1111條經驗 獲得超0個贊
假設您想要從上次發票日期算起的最后 30 天,請使用 max 子查詢和 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'
添加回答
舉報