C# 选择两个日期之间的行
我正在尝试使用asp.NETC和SQLServer创建公告页面 在这个页面中,我在数据库中有一个弹出字段,如果这个字段被选中,我想在tinybox中显示这个声明代码,如下所示 这很有效,但我对约会有问题 我想列出最后一个弹出选中的字段,以及该字段是否在两个日期之间。我的sql查询如下所示:C# 选择两个日期之间的行,c#,asp.net,sql,C#,Asp.net,Sql,我正在尝试使用asp.NETC和SQLServer创建公告页面 在这个页面中,我在数据库中有一个弹出字段,如果这个字段被选中,我想在tinybox中显示这个声明代码,如下所示 这很有效,但我对约会有问题 我想列出最后一个弹出选中的字段,以及该字段是否在两个日期之间。我的sql查询如下所示: Select Top 1 * From duyurlarx Where ([popup] = 1) And tarih BETWEEN
Select Top 1 *
From duyurlarx
Where ([popup] = 1)
And tarih
BETWEEN convert(date, getdate())
AND DATEADD(day,popupsure,convert(date, getdate()))
现场说明:
tarih = date field
popupsure = day count for popup show
这意味着如果tarih字段=2014年2月1日,popupsure字段=3,则本公告将显示至2014年2月4日
但是,当我将日期字段更改为1或2天前时,它不起作用。我做错什么了吗?您应该将字段转换为日期,以便进行可靠的日期比较
Select Top 1 *
From duyurlarx
Where ([popup] = 1)
And cast(tarih as Date)
BETWEEN Cast(GetDate() as Date)
AND Cast(DATEADD(day,popupsure,convert(date, getdate())) as Date)
你的问题是
给我从今天到现在(popupsure)之间的所有[duyurlarx]和[tarih]的时间
|TODAY-TARIH-TODAY+POPUPSURE|
听起来你想要的是相反的:所有的[duyurlarx],今天在[tarih]和[tarih+popupsure]之间
|TARIH-TODAY-TARIH+POPUPSURE|
这相当于
Select Top 1 *
From duyurlarx
Where ([popup] = 1)
And convert(date, getdate())
BETWEEN tarih
AND DATEADD(day, popupsure, tarih)
这听起来对吗?这是另一种可行的变体
Select Top 1 *
From duyurlarx
Where ([popup] = 1)
And cast(getdate() as date)
BETWEEN cast(tarih as date) AND cast(tarih + popupsure as date)
你想要演员扮演日期,因为你不想要分钟。你要检查今天是否在tarih和tarih+popupsure之间
当你说dateField+1GetDate返回DateTime时,默认情况下会添加一天,我想他不是已经这样做了吗?使用convertdate,getdate?@RickS在午夜getdate之后犯了危险的错误!='2014-01-31'. 玛丽亚姆是对的。在SQL 2008引入日期类型之前,这是一个巨大的痛苦。事实上,当您说dateField+1时,您必须解释默认情况下添加了一天,这表明它不如DATEADDDAY[num],[DATE]清楚,只有那些不知道db server如何工作的人才清楚,事实上,这是一个很好的学习项目。我还可以指出,迄今为止的演员阵容比我所理解的“转换”要快。这是一个很好的答案,在大多数情况下都会起作用,但它会为不正确的行为留下窗口。我的回答关闭了这个窗口CAST的优点是它符合ANSI标准。CAST作为CONVERT实现:如果查看执行计划,您可以看到这一点。请提供证据证明它更快。@MarkSowul我最近以不同的格式对日期比较进行了基准测试。CAST在SQLServer中表现出色。此外,考虑在DuyurLax上添加一个计算列,用于DATEADDAY、POPPURECK、TALIH