查询没有返回正确的记录
问题描述:
你好,我有这样的代码,我试图解决的问题是,当我通过在同一年度内的参数说查询没有返回正确的记录
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
答
不要使用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
希望这是有益
也许DB只包含2011年1月的数据?请为您提到的以前的参数显示几行返回的行。此外,您正在单个查询中进行4次日期时间转换,而不是最佳 – sll 2012-02-14 15:25:10
为什么不使用DATETIME作为数据类型? – flayto 2012-02-14 15:27:06
它拥有所有月份的数据..,它可以在同一年或任何日期的1月1日至12月31日运行,只要它们在同一年..问题是在说什么时11/01/2011 - 02/02/2012 – user710502 2012-02-14 15:27:27