查询没有返回正确的记录

问题描述:

你好,我有这样的代码,我试图解决的问题是,当我通过在同一年度内的参数说查询没有返回正确的记录

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

也许DB只包含2011年1月的数据?请为您提到的以前的参数显示几行返回的行。此外,您正在单个查询中进行4次日期时间转换,而不是最佳 – sll 2012-02-14 15:25:10

+0

为什么不使用DATETIME作为数据类型? – flayto 2012-02-14 15:27:06

+0

它拥有所有月份的数据..,它可以在同一年或任何日期的1月1日至12月31日运行,只要它们在同一年..问题是在说什么时11/01/2011 - 02/02/2012 – user710502 2012-02-14 15:27:27

不要使用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 2012-02-14 15:30:57

尽量把日期为标准的格式是YYYY-MM-DD

希望这是有益