【发布时间】:2013-10-03 15:33:16
【问题描述】:
这可能是基本的,但我对 SQL 很陌生。我有一个在 2 个日期之间返回记录的存储过程。存储过程代码:
CREATE PROCEDURE [dbo].[getSuggestionsByName]
@fromDate nvarchar(50),
@toDate nvarchar(50)
AS
BEGIN
SELECT name, unit, dept, ref, shortDescription, dateRaised, dateCompleted, suggestionType, awardType, awardAmount, dateCollected
FROM suggestion.dbo.suggestions
where dateRaised BETWEEN @fromDate and @toDate
END
GO
我正在使用以下命令进行测试:
exec getSuggestionsByName @fromdate = '1/09/2013', @todate = '3/10/2013'
这仅返回 3 行,如下所示:
但是,当我在 dbo.suggestions 表上执行“选择前 1000 行”时,我会得到更多符合以下条件的行:
我不确定为什么程序没有返回这些记录
【问题讨论】:
-
dateRaised列的数据类型是什么?为什么参数传递为nvarchar?如果您存储为字符串,则该格式将无法正确排序。所以BETWEEN不起作用。使用date[time]数据类型。 -
尝试后会得到什么:exec getSuggestionsByName fromdate = '01/09/2013', todate = '03/10/2013' ?
-
请发布表定义。
-
Martin:我想使用日期数据类型,但由于无效转换等原因,我的 Web 应用程序和数据库之间的通信遇到了真正的麻烦,所以我将所有内容存储为 nvarchar。我知道这是不正确的,但它在大多数情况下都有效。我尝试在这种情况下将参数作为日期数据类型传递并不断出错
标签: sql sql-server stored-procedures