2012-01-12 54 views
0

我在时间表报告上撰写SQL查询。我需要报告只返回选定日期的周的详细信息。例如,如果我选择02/01/2012(dd/MM/yyyy),那么它应该只在2012年2月1日至2012年1月8日之间返回结果。SQL仅返回指定星期的日期

感谢

+0

你的意思是日历周? (如果指定星期三,则计算包括前一个星期一到下一个星期日,例如?)或仅指定日期开始的7天? – MatBailie 2012-01-12 16:14:55

+0

无论用户选择什么日子加上7 – Melanie 2012-01-12 16:43:00

回答

1
SELECT 
    * 
FROM 
    yourTable 
WHERE 
    dateField >= @yourDate 
    AND dateField < @yourDate + 7 

SQL的一些变化可能增加7天一个DATEVALUE的具体方式。如...
- DateAdd(Day, 7, @date)
- DATE_ADD(@date, INTERVAL 7 DAYS)
- 等,等

此选项既指标友好的,是有弹性的,以有时间部分以及日期部分的数据库字段。

0

你最简单的就是WEEK_OF_YEAR功能在你的SQL引擎相当于

但是您也可以使用DATE_ADD

WHERE table.date BETWEEN target_date AND DATE_ADD(target_date,INTERVAL 7 DAY) 
+0

当使用BETWEEN时,应该是'6 DAY'而不是'7 DAY' – MatBailie 2012-01-12 16:11:55

+0

你说的对,我习惯使用时间戳:( – amccausl 2012-01-12 16:33:02

0

这取决于您正在使用的数据库系统。 MySQL有一个功能卡列斯WEEK(),SQL Server可以做这样的事情与DATEPART()函数:

的MySQL:

SELECT 
* 
FROM table 
WHERE WEEK(date_col) = WEEK('02/01/2012'); 

SQL SERVER:

SELECT 
    * 
    FROM table 
    WHERE DATEPART(WEEK, datecol) = DATEPART(WEEK,'02/01/2012'); 
+0

这个混淆INDEX并导致扫描而不是查找 – MatBailie 2012-01-12 16:06:07

+0

这样,但是添加七天到任意日期(如在您的帖子(Dems)中),可能没有必要导致有一周的时间(we.g 。上周的星期三到本周的星期三)。你可能会很快,但是正确吗? – Mithrandir 2012-01-12 16:09:25

+0

啊,我找到你了!它取决于OP是否需要一个日历周,以及OP认为该周的内容开始一天,我只是假设一个7天的窗口,现在我只是不确定OP想要哪个:)好点! – MatBailie 2012-01-12 16:13:38