首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ISNULL日期月

ISNULL日期月
EN

Stack Overflow用户
提问于 2009-12-11 01:18:17
回答 3查看 216关注 0票数 0

我有两个下拉列表,一个是月份,另一个是年份。用户为他们想要检索的项目选择提交月份和年份。在数据库中,日期是以完整的形式输入的。01/12/2009.在下拉列表中有一个“所有年份”和“所有月份”的选项,但当用户选择其中任何一个时,他们都会得到null结果。非常感谢。这是我的问题:

代码语言:javascript
复制
SELECT ItemID, YEAR(Submit) AS SubmitYear, MONTH(Submit) AS SubmitMonth 
FROM Items 
WHERE (YEAR(Submit) LIKE ISNULL(@YearPay, ''))
 AND (MONTH(Submit) LIKE ISNULL(@MonthPay, ''))

我的参数是:

<asp:ControlParameter ControlID="DropDownList1" DefaultValue="" Name="YearPay" PropertyName="SelectedValue" />

<asp:ControlParameter ControlID="DropDownList2" DefaultValue="" Name="MonthPay" PropertyName="SelectedValue" />

EN

回答 3

Stack Overflow用户

发布于 2009-12-11 01:24:16

这里有一个解决问题的方法:

代码语言:javascript
复制
 SELECT ItemID, YEAR(Submit) AS SubmitYear, MONTH(Submit) AS SubmitMonth 
 FROM Items 
 WHERE (YEAR(Submit) = @YearPay OR @YearPay IS NULL)
 AND (MONTH(Submit) = @MonthPay OR @MonthPay IS NULL)

这样,如果您为任一变量传入NULL,WHERE子句的该部分将返回true。

票数 5
EN

Stack Overflow用户

发布于 2009-12-11 01:27:39

一种相当快速的方法是确保@YearPay和@MonthPay是整数数据类型,然后传入(例如) -1来表示"ALL",因此您的查询将变为:

代码语言:javascript
复制
SELECT ItemID, YEAR(Submit) AS SubmitYear, MONTH(Submit) AS SubmitMonth 
FROM Items 
WHERE (YEAR(Submit) = @YearPay OR @YearPay = -1)
 AND (MONTH(Submit) = @MonthPay OR @MonthPay = -1)

但是,对于整体性能,我个人不会使用这种方式,使用YEAR()和MONTH(),因为您不会获得良好的索引使用率。相反,我倾向于将查询更改为只接受一个日期范围,这样,.NET代码就会根据所选下拉项生成to和from日期。

例如:

代码语言:javascript
复制
SELECT ItemID, YEAR(Submit) AS SubmitYear, MONTH(Submit) AS SubmitMonth 
FROM Items 
WHERE (Submit >= @FromDate OR @FromDate IS NULL) 
    AND (Submit < @ToDate OR @ToDate IS NULL)

因此,使用以下示例进行月/年选择:

2009年1月将导致@FromDate = ' 2009 -01-01',@ToDate - '2009-02-01‘

任何月份,2009都会导致@FromDate = '2009-01-01',@ToDate = '2010-01-01‘

任何月份、任何年份都会导致= @FromDate = NULL,@ToDate = NULL

票数 1
EN

Stack Overflow用户

发布于 2009-12-11 01:30:27

尝尝这个

代码语言:javascript
复制
select * from sys.tables where name like ''

还有这个

代码语言:javascript
复制
select * from sys.tables where name like '%%'

话虽如此,我完全同意内巴卡内泽的评论(和解决方案)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1882548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档