2012-02-14 3 views
0

Привет У меня есть этот код, который я пытаюсь исправить, вопрос в том, что, когда я прохожу параметр в том же году сказатьзапрос не возвращает правильные записи

startDate = 01/01/2011 EndDate 07/01/2011 

Он работает возвращает правильные данные, кроме проблема, когда я пытаюсь использовать его с другим годом, скажет

startDate = 02/01/2011 EndDate 01/25/2012 
--(wont work shows blank all thought there is data in both years). 

Вот мой код SQL

ALTER PROCEDURE [dbo].[GetOrderByDateRange] 
    @startDate nvarchar(50), 
    @endDate nvarchar(50) 
AS 
BEGIN 
    DECLARE @days varchar(100) 
    set @days = DATEDIFF(d, @StartDate, DATEADD(day,+1,@EndDate)) 

    SELECT distinct(CONVERT(char(10), OrdDate, 101)) as OrdDate, 
    COUNT(PurchaseId) as OrdCount, 
    SUM(Total) as OrdTotals, 
    AVG(Total) as AvgOrdAmount, 
    SUM(SubTotal) as Net, 
    @days as 'Days' 
    FROM [PurchaseOrders] 
    WHERE CONVERT(char(10), OrdDate, 101) >= @startDate 
     AND CONVERT(char(10), OrdDate, 101) <= @endDate 
    GROUP BY CONVERT(char(10), OrdDate, 101) 
END 

GO 
+0

Возможно, БД содержит только данные за январь-2011? Пожалуйста, покажите несколько строк, возвращенных для прежних параметров, о которых вы упомянули. Также вы делаете 4-кратное преобразование даты в одном запросе, а не в оптимальном – sll

+0

Почему вы не используете DATETIME в качестве своих типов данных? – flayto

+0

У него есть данные за все месяцы .., он работает с 1 января по 31 декабря того же года или любой даты, пока они находятся в том же году .. проблема заключается в том, когда вы говорите 11/01/2011 - 02/02/2012 – user710502

ответ

2

Не используйте CONVERT ... если предположить OrdDate является DATETIME колонна, она должна быть:

CREATE PROCEDURE dbo.GetOrderByDateRange 
    @StartDate DATE, -- pass 'yyyy-mm-dd' format 
    @EndDate DATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
... 
    WHERE OrdDate >= @startDate AND OrdDate < DATEADD(DAY, 1, @endDate) 
END 
GO 
+0

большое спасибо – user710502

0

Попробуйте преобразовать формат даты к стандарту, который является гггг-ММ-дд

Надежда это полезно