2011-10-12 62 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)