SQL中的日期时间间隔

时间:2016-12-09 08:45:40

标签: sql sql-server date

我有一个名为CrateDate的列,我想检索其CreateDate最近两天的记录。我怎样才能做到这一点? 我失败的尝试是这样的:

SELECT COUNT (*)
  FROM [MyDB].[dbo].[MyTable] WHERE City = 'Paris' AND CreateDate >= '2016-12-07' AND CreateDate <= '2016-12-10'

8 个答案:

答案 0 :(得分:2)

使用DATEADD从当前日期减去2天,并检查创建日期是否在当天的日期之间:

SELECT COUNT (*)
  FROM [MyDB].[dbo].[MyTable]
  WHERE City = 'Paris' AND CreateDate
      BETWEEN DATEADD(DAY, -2, GETUTCDATE()) AND GETUTCDATE() 

如果你想要整天(即没有时间组件,那么使用它):

SELECT COUNT (*)
  FROM [MyDB].[dbo].[MyTable]
  WHERE City = 'Paris' AND CreateDate
      BETWEEN  dateadd(dd,0, datediff(dd,0,DATEADD(day, -2, GETUTCDATE())))
  AND DATEADD(s, -1, dateadd(dd,0, dateadd(dd,0, datediff(dd,0,DATEADD(day, 1, GETUTCDATE()))))

如果当前日期是2016年12月9日,那么第二个查询的where子句将生成:

CreateDate BETWEEN 07-Dec-2016 00:00:00 and 09-Dec-2016 23:59:59
  

注意:如果您的日期时间以当地时间存储,请使用GETDATE();如果以UTC格式存储,则使用GETUTCDATE()

答案 1 :(得分:2)

您可以使用DATEDIFF()GETDATE()

SELECT COUNT (*)
FROM [MyDB].[dbo].[MyTable] 
WHERE City = 'Paris' 
  AND DATEDIFF(DAY,CreateDate,GETDATE()) between 0 and 2

这只会检查CreateDate的日期部分并忽略时间。 (这意味着如果您在'2016-12-09 10:11'上运行查询,它也会获得CreateDate='2016-12-07 08:17'

的数据

答案 2 :(得分:1)

您可以使用DATEADD()功能来减去当前日期的天数,以获取那么多天的旧数据:

SELECT COUNT(*)
FROM MyTable
WHERE City = 'Paris'
    AND CreateDate BETWEEN DATEADD(DAY, -2, GETDATE()) AND GETDATE()

甚至更简单(对于2008R2及以上的至少),因为你要减去天数:

SELECT COUNT(*)
FROM MyTable
WHERE City = 'Paris'
    AND CreateDate BETWEEN GETDATE()-2 AND GETDATE()

如果你想要有一个更细粒度的间隔,比如40小时,那么你必须使用DATEADD(),否则你可以坚持减去想要从第二天回来的天数查询。

答案 3 :(得分:1)

试试这个

SELECT COUNT (*) FROM [MyDB].[dbo].[MyTable] 
WHERE City = 'Paris' AND CreateDate >= dateadd(day,datediff(day,0,getdate()),-2) 
      AND CreateDate < dateadd(day,datediff(day,0,getdate()),1)

答案 4 :(得分:1)

dateadd()和getdate()

select count(*)
from MyTable
where City = 'Paris'
and CreateDate between dateadd(dd,-2, getdate()) and getdate()

答案 5 :(得分:1)

试试这个。

  select count(*) FROM [MyDB].[dbo].[MyTable] 
  WHERE City = 'Paris' 
  and CreateDate >= DATEADD(DAY, -2, GETDATE())

答案 6 :(得分:0)

如果所有记录都与服务器保存在同一时区,那么下面就可以了:

SELECT COUNT (*)
FROM [MyDB].[dbo].[MyTable] 
WHERE City = 'Paris' AND CreateDate >= DATEADD(day, -2, GETDATE())

如果记录保存在不同的时区,可能需要知道每个城市的exaclty时区。如果没有保存相应的时区,可以使用UTC更好的方法:

SELECT COUNT (*)
FROM [MyDB].[dbo].[MyTable]
WHERE City = 'Paris' AND CreateDate >= DATEADD(day, -2, GETUTCDATE())

答案 7 :(得分:0)

select count(*)
from MyTable
where CreateDate between dateadd(dd,-2, getdate()) and getdate() and City = 'Paris'