Asp.net 如何使用DropDownList控制参数格式化查询,以返回.aspx网页上不晚于90天的日期数据?

Asp.net 如何使用DropDownList控制参数格式化查询,以返回.aspx网页上不晚于90天的日期数据?,asp.net,sql-server,sql-server-2008,if-statement,drop-down-menu,Asp.net,Sql Server,Sql Server 2008,If Statement,Drop Down Menu,如果选择调用下面的查询,则变量@status在一个网页上取三个值C、N、V。 在下面的查询中,如何设置查询格式以返回日期不超过90天的数据,以便在选中时返回日期(输入日期)不超过90天的项目(仅@status='C'),但对于其他状态V和N,返回数据而不受任何日期限制 <asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnection

如果选择调用下面的查询,则变量@status在一个网页上取三个值C、N、V。 在下面的查询中,如何设置查询格式以返回日期不超过90天的数据,以便在选中时返回日期(输入日期)不超过90天的项目(仅
@status='C'
),但对于其他状态V和N,返回数据而不受任何日期限制

    <asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"  

 SelectCommand="SELECT W.order_id, w.entry_date, w.s_num, w.prot_num, w.i_num, w.phm_num, w.status, w.Comments, w.UName, w.prStatus, S.S_Name, 
                  ISNULL(p.Phm_fname, ' ') + ' ' + ISNULL(p.Phm_lname, ' ') AS 'PhmName', ISNULL(S.PHM_CITY, ' ') + ' ' + ISNULL(S.PHM_STATE, ' ') AS 'Phm_city'
FROM         Web_Ship AS w INNER JOIN
                  Phm_of_rcrd AS p ON p.phm_num = w.phm_num INNER JOIN
                  Stdy_Site AS S ON w.s_num = S.S_Num
WHERE     (w.status = @status)
ORDER BY w.order_id DESC"
            <SelectParameters>
                     <asp:ControlParameter ControlID="StatusDropDownList" Name="Status" 
            PropertyName="Text" Type="Char" />
            </SelectParameters>
    </asp:SqlDataSource>

您不需要IF语句,只需要稍微修改Where子句,如下所示:

WHERE     (w.status = @status)
AND (
     (@status = 'C' AND entry_date >= DATEADD(DAY, -90 , GETDATE()))
     OR 
     (@status IN ('V','N'))
    ) 

@阿里先生,谢谢你解决了这个问题。我同意@M.Ali提供的解决方案,但我的方法会略有不同。我会这样做:
WHERE(w.status=@status)和(CASE@status当'C'然后DATEDIFF(d,GETDATE(),w.entry_date)否则0结束)>=90
@Zac,再次感谢您的选择。这也很好用。我刚刚学会了做一件事的两种方法。@Zacbrady您建议的方法可能会返回相同的结果,但它的性能会很差,因为它不是一个可搜索的表达式,
DATEDIFF
函数将忽略
Entry\u Date
列上定义的任何索引。因此,与我建议的方法相比,它的性能会很差,我建议的方法是可搜索的,并且会使用
Entry\u Date
列中定义的任何索引。@M.Ali感谢您的知识:)