2011-06-15 32 views
3

我是SQL语句新手,根据修改日期从一周前获取数据时遇到了一些麻烦。从一周前获取数据的SQL语句?

SELECT People.first, People.last, company.companyname, People.lastmodified 
    FROM job_prof 
    INNER JOIN People ON job_prof.cid = People.cid 
    INNER JOIN company ON job_prof.Id = company.id 
-> WHERE People.lastmodified = DATE(DATE_ADD(GETDATE(), INTERVAL -7 DAY)) 
    ORDER BY People.lastmodified DESC"; 

在表格日期的例子是2011/6/9下午12时08分01秒

任何建议将是有益的。

谢谢

+0

什么是你想要的确切范围?一周前有什么修改?任何只在上周修改过的东西? – 2011-06-15 18:23:06

回答

3
WHERE DATEDIFF(day, People.lastmodified, GETDATE()) <= 7 
+0

明白了! WHERE DATEDIFF(日,GETDATE(),People.lastmodified)> = -7 感谢@Bara [R 而 谢谢大家:) – TheRealDK 2011-06-15 18:26:01

+0

只要记住,如果你打算忽略时间,你可能需要截断日期比较中的时间部分。 – 2011-06-15 18:32:03

+0

如何回到两周...所以而不是上周必须两周前(http://stackoverflow.com/questions/26021347/how-to-get-two-week-prior-data-from -一张桌子) – SearchForKnowledge 2014-09-24 17:46:20

2

诀窍的日期是创建一个范围第一与DATEADD和其他任何你需要的,即

declare @start datetime = ..., 
     @end datetime = ... 

然后在该范围内搜索;我通常包括起始和排除结束,因为这允许

where row.lastmodified >= @start 
and row.lastmodified < @end 

有一个范围是至关重要的,除非值是整个单位(天等),一个简单的“第10和12之间的数据” - 否则平等赢得工作得很好。和简单> =和<使用能够有效地使用索引等

0

如果它是你正在寻找一个范围,如任何修饰开始一个星期前,在此之前,结束一个星期,BETWEEN使这挺容易。

WHERE People.lastmodified BETWEEN DATEADD(week, -1, getdate()) AND DATEADD(week, -2, getdate())