2014-02-17 4 views
0

Я хотел знать, как я могу получить записи за текущую неделю.Как получить данные за текущую неделю из MSSQL

Запрос я использую:

DECLARE @TableX TABLE 

([Date] DATETIME) 

INSERT INTO @TableX 

SELECT '2014-2-17' UNION ALL 

SELECT '2014-2-18' UNION ALL 

SELECT '2014-2-19' UNION ALL 

SELECT '2014-2-20' UNION ALL 

SELECT '2014-2-21' 


SELECT * FROM @TableX 

WHERE Date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND Date <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 

Запрос я писал не производит данные правильно? Может кто-нибудь, пожалуйста, скажите мне, что не так в запросе.

Записи, которые я получаю от этого запроса:

2014-02-17 00:00:00.000 
2014-02-18 00:00:00.000 
+0

Я не получаю записи на текущую неделю – user3318137

+0

Я просто получаю запись за два дня – user3318137

+0

MS SQL 2008, которую я использую. – user3318137

ответ

1

Пожалуйста, попробуйте использовать КТР. Ниже запроса возвращается 7 дней недели, учитывая воскресенье как день начала недели.

;WITH t 
    AS (SELECT Dateadd(wk, Datediff(wk, 0, Getdate()), -1) AS WeekD, 
       1           cnt 
     UNION ALL 
     SELECT weekd + 1, 
       cnt + 1 
     FROM t 
     WHERE cnt + 1 < 8) 
SELECT CONVERT(NVARCHAR(20), weekd, 106) WeekDate, 
     Datename(dw, weekd)    Name 
FROM t 
+0

Что делать, если мой первый день недели - воскресенье? Может я пользователь DateFirst? – user3318137

+0

Пожалуйста, проверьте отредактированный ответ с воскресеньем в качестве начального дня недели. – TechDo

+0

Да, спасибо и как я могу получить записи из моей таблицы? Должен ли параметр «В» из вашего запроса работать? – user3318137

1

Это позволит получить все реаксоры с одинаковым числом недель и в том же году.

select * from cal where date_format(cal_date,'%v') = date_format(now(),'%v') and date_format(cal_date,'%Y')=date_format(now(),'%Y'); 
0

Попробуйте эту Proc

Create PROCEDURE getAllDaysBetweenTwoDate 
(
@FromDate DATETIME,  
@ToDate DATETIME 
) 
AS 
BEGIN 

    DECLARE @TOTALCount INT 
    SET @FromDate = dateadd(dd,(datediff(dd,-53684,getdate())/7)*7,-53684) 
    SET @ToDate = dateadd(dd,((datediff(dd,-53684,getdate())/7)*7)+6,-53684) 
    Select @TOTALCount= DATEDIFF(DD,@FromDate,@ToDate); 

    WITH d AS 
      (
       SELECT top (@TOTALCount) AllDays = DATEADD(DAY, ROW_NUMBER() 
       OVER (ORDER BY object_id), REPLACE(@FromDate,'-','')) 
       FROM sys.all_objects 
      ) 
     SELECT AllDays From d 

    RETURN 
END 
GO 
0

простой способ я могу предложить, чтобы получить неделю Дейта это>

select datepart(wk, [date to test]) as field 

надеюсь, что это помогает!

Смежные вопросы