选择两个日期之间的行

时间:2014-01-31 21:14:03

标签: c# asp.net sql

我正在尝试使用asp.net c#和sql server做声明页面。

在这个页面中,我在datebase中有“popup”字段,如果选中此字段,我想在这样的tinybox中显示这个anouncement代码。

http://i.imgur.com/kcn5QoB.png

它的工作但我的日期有问题。

我想列出最后一个“popup”选中字段以及两个日期之间的这个字段。我的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”字段= 01.02.2014并且“popupsure”字段= 3,则此公告将在2014年2月4日之前显示。

但是,当我将日期字段更改为1或2天之前,它不起作用。我做错了吗?

3 个答案:

答案 0 :(得分:3)

你的查询说 “从现在到[popupsure]天之间,用[tarih]给我所有的[duyurlarx]” |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)

这听起来不错吗?

答案 1 :(得分:0)

您应该将字段转换为日期以进行可靠的日期比较。

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)

答案 2 :(得分:0)

这是另一种可行的变种

Select Top 1 * 
From duyurlarx 
Where ([popup] = 1) 
    And cast(getdate() as date) 
        BETWEEN cast(tarih as date) AND cast(tarih + popupsure as date)

您想要CAST AS DATE,因为您不需要分钟。你想检查今天是否介于tarih和tarih + popupsure之间

当您说dateField + 1

时,默认情况下会添加一天