2015-06-11 30 views
0

我想寫一個SQL Server查詢,它應該得到兩個日期之間的差異(即日期可用於名爲「開始日期」和「結束日期」)。我希望找到這兩個不同列中兩個日期之間的差異,並在另一列中更新爲「已過期」(如果差異爲-1或更低)。最重要的是:時間應該從指定的開始日期開始,並且應該定期檢查。SQL Server查詢獲取兩個不同列中的兩個日期之間的差異

+1

有效期限聽起來像是與當前時間有關而不是開始時間。你確定你的要求沒問題嗎?此外,我不會添加任何更新的邏輯,您可以將它添加到您正在使用的select子句中。 –

+1

好吧,您尚未發佈您嘗試過的內容。從[DATEDIFF]開始(https://msdn.microsoft.com/en-us/library/ms189794(v = sql.105).aspx)。 – Andrew

+0

「你應該定期檢查」是什麼意思?例如,您是否想要使用此更新查詢作爲工作本身運行計劃作業? –

回答

0

您可以使用DATEDIFFcase when這樣的:

update table set expColumn = case when DATEDIFF(day,start_date,end_date) > 0 
     then 'Expired' end FROM table 

希望這有助於。

0

要使用DATEDIFF()函數查找兩個日期值之間的差值。

此外,根據您的要求,您可以在表中將其設置爲計算列。這樣,計算列定義中的組件列的任何更改都會自動更新計算列以反映新值。
使用PERSISTED關鍵字,您還可以讓計算列被索引。 請查看此處的文檔以瞭解更多詳細信息:https://technet.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx

0

這是基於我認爲您正在嘗試做的事情,但並不完全清楚。

我不認爲你想添加一列到你的表來確定什麼是過期的,因爲該列將依賴於「結束日期」列以及違反第三範式的主鍵。它確實不需要,因爲您可以隨時查詢哪些過期。我無法真正想到一個場景,您需要有一個表明過期的列。您可以像創建其他人一樣創建一個查詢來顯示(而不是創建)另一個標記過期行的列,或者只顯示過期的行,或者將它們移動到不同的表中可能更有意義。

SET IDENTITY_INSERT ExpiredTableName ON 

INSERT INTO ExpiredTableName (Column1, Column2, StartDate, EndDate) 
SELECT * 
FROM TableName 
WHERE DATEDIFF(day, InvoiceDate, '2015-04-20') >0 

身份插入僅適用於自動生成的密鑰。

您可以像上面提到的那樣定期運行查詢。