我有一个名为CrateDate
的列,我想检索其CreateDate最近两天的记录。我怎样才能做到这一点?
我失败的尝试是这样的:
SELECT COUNT (*)
FROM [MyDB].[dbo].[MyTable] WHERE City = 'Paris' AND CreateDate >= '2016-12-07' AND CreateDate <= '2016-12-10'
答案 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'