我正在尝试使用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天之前,它不起作用。我做错了吗?
答案 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