如何在日期和时间之间进行搜索

时间:2012-06-15 12:53:23

标签: sql sql-server-2008 tsql

我有一张桌子,有人每天都会更新这张桌子。

我想创建一个视图,而不是手动更新此视图,就像那个人一样,我想让它自动化。

例如,今天是15 / jun / 2012并且表格已更新,当该人员自动更新表格时,必须更新视图(运行时)。

我的麻烦是如何让一个月的第一天到最后一天更新表格。

2 个答案:

答案 0 :(得分:1)

表格更新的最后一天必须是今天,对吗?该表是否会比今天晚些时候包含数据?如果没有,那么你可以说“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)

答案 1 :(得分:0)

如果我正确地理解了您的问题,您需要检查您的表格到上次修改日期并获得当月的第一天吗?

如果这是真的,你需要像:

DECLARE @maxdate DATETIME
SELECT @maxdate = MAX(ModifiedDate) FROM [yourTable]
SELECT DATEADD(DAY, (DAY(@maxdate) - 1)*(-1), @maxdate)