0

这可能是基本的,但我对 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 行”时,我会得到更多符合以下条件的行:

在此处输入图像描述

我不确定为什么程序没有返回这些记录

4

1 回答 1

2

尝试这个

SELECT name, unit, dept, ref, shortDescription, dateRaised, dateCompleted, suggestionType, awardType, awardAmount, dateCollected
FROM suggestion.dbo.suggestions
where convert(datetime,dateRaised,103) BETWEEN convert(datetime,@fromDate,103) and convert(datetime,@toDate,103)

发生这种情况是因为您column(dateRaised)parameters(@fromDate , @toDate)所有人都是 varchar,并且当您在 2 varchar 之间有条件时,您将得到您所看到的结果。当您将 '1' 和 '2' 定义为 varchar 时,表示'11' 介于 '1' 和 '2' 之间

于 2013-10-03T15:39:48.620 回答