C# 选择两个日期之间的行

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

我正在尝试使用asp.NETC和SQLServer创建公告页面

在这个页面中,我在数据库中有一个弹出字段,如果这个字段被选中,我想在tinybox中显示这个声明代码,如下所示

这很有效,但我对约会有问题

我想列出最后一个弹出选中的字段,以及该字段是否在两个日期之间。我的sql查询如下所示:

    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+1

GetDate返回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