我有一张桌子,每天有人更新这张桌子。
我想创建一个视图,而不是像那个人那样手动更新这个视图,我想让它自动化。
例如,今天是 2012 年 6 月 15 日,并且表已更新,当该人更新表时,必须自动更新视图(运行时)。
我的麻烦是如何将一个月的第一天到最后一天更新表格。
我有一张桌子,每天有人更新这张桌子。
我想创建一个视图,而不是像那个人那样手动更新这个视图,我想让它自动化。
例如,今天是 2012 年 6 月 15 日,并且表已更新,当该人更新表时,必须自动更新视图(运行时)。
我的麻烦是如何将一个月的第一天到最后一天更新表格。
表更新的最后一天一定是今天,对吧?该表是否会包含比今天晚的数据?如果不是,那么您可以说“WHERE >= 本月初”,对吗?您可以使用各种字符串转换和连接技巧获得当月的开始,但我更喜欢的方法是坚持日期数学:
SELECT [First day of this month] =
DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
因此,在您看来,您可以使用以下 where 子句将其限制为自本月初以来的数据:
WHERE date_col >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
如果您需要在现在之后排除数据,您可以添加:
AND date_col < CURRENT_TIMESTAMP
编辑
您的问题说该表每天都会更新。如果这实际上不是真的,并且您需要从表实际更新的上个月开始,您可以将上面的内容更改为:
WHERE date_col >= (SELECT DATEADD(MONTH,
DATEDIFF(MONTH, '19000101', MAX(date_modified)),
'19000101') FROM dbo.your_table)
如果我正确理解了您的问题,您需要检查您的表格到最后修改日期并获得该月的第一天发生这种情况?
如果这是真的,你需要类似的东西:
DECLARE @maxdate DATETIME
SELECT @maxdate = MAX(ModifiedDate) FROM [yourTable]
SELECT DATEADD(DAY, (DAY(@maxdate) - 1)*(-1), @maxdate)