2011-10-12 110 views
2

我正在創建一個MVC應用程序,我需要發送電子郵件到所有那些在Customer表中未更新其值(DateUpdated)的記錄。如果超過6個月,從SQL Server中選擇記錄

Customer表看起來像這樣:

ID (PK) 
Name 
Address 
DateLastUpdated 

現在我有這樣的MySQL查詢:

SELECT * FROM users WHERE DateLastUpdated >= NOW() - INTERVAL 6 MONTH 

如何,我將它寫在T-SQL和MVC3執行此任務?請幫忙!

回答

7

您的查詢應該是:

SELECT * FROM users WHERE DateLastUpdated >= DateAdd(month, -6, getdate())

此外,您可能希望這樣你就只剩下如日期,以剝離出部分時間2011-04-12 00:00:00.000您可以使用此:

SELECT * 
FROM users 
WHERE DateLastUpdated >= DateAdd(Month, -6, Cast(Floor(Cast(GetDate() as Float)) as DateTime)) 
+0

巴里,這是我的回答你爲什麼要霸佔所有的信譽! :-) – codingguy3000

+0

@Barry,現在我有這個查詢,我需要每天在我的MVC應用程序中運行,我將如何完成這項工作? –

+0

爲什麼你需要在MVC中運行?您可以使用簡單的SQL代理作業或SSRS報告來安排此過程。 – codingbadger

1

添加日期函數可用於添加和減去日期

SELECT * FROM users WHERE DateLastUpdated >= DateAdd(month, -6, getDate()) 

你可以找到更多信息here

0

嘗試:

SELECT * FROM users 
WHERE DateLastUpdated >= DATEADD(Month, -6, GETDATE()) 
0
SELECT * FROM users 
WHERE DateLastUpdated >= dateadd(month, -6, datelastupdated) 

使用dateadd函數。

1

這更像是一種補充。如果您的DateLastUpdated包含小時/分鐘/秒/毫秒組件,則可能會發現一些您期望被忽略的記錄。你總是可以做這樣的事情

SELECT * FROM users WHERE CONVERT(DATETIME, CONVERT(NVARCHAR(10), DateLastUpdated, 102), 102) >= DateAdd(month, -6, getdate()) 
0
SELECT * FROM users WHERE DateLastUpdated >= DATE_SUB(now(), INTERVAL 6 MONTH)