带日期范围的SQL查询

时间:2012-03-20 07:55:09

标签: sql sql-server sql-server-2008

我正在尝试使用以下sql查询从表中获取记录。

SELECT Code,Description FROM Table
WHERE ID= 1 AND FromDate >= '2010-02-14' AND ToDate <= '2012-03-14'

即使此日期存在记录,查询也不会返回任何内容。

ID HID HCode HDescription FromDate            ToDate 
-------------------------------------------------------------------
1  3   H8    New Year     2012-03-14 12:38:00 2012-03-14 12:38:00

请给我一个合适的解决方案。谢谢你的时间!!

5 个答案:

答案 0 :(得分:2)

试试这个:

declare @dayAfter datetime     --let take 1 day after

set @dayAfter = DateAdd(day,1,'20120314')

SELECT Code,Description FROM Table
WHERE ID= 1 AND 
FromDate >= '20100214' AND 
ToDate <  DateAdd(day, DateDiff(day, 0, @dayAfter ), 0)

p.s:

DateAdd(day, DateDiff(day, 0, @dayAfter ), 0)会将时间重置为00:00

所以你需要desired EndTime < begining of the day after

答案 1 :(得分:0)

如果您在FromDate和ToDate之间选择数据,则删除ID = 1。 在这种情况下,Аs是ID = 1的选定记录,FromDate和ToDate选中此条目。

答案 2 :(得分:0)

尝试使用以下查询,它肯定会解决您的问题....

SELECT Code,Description FROM Table
   WHERE ID= 1 AND
         CONVERT(VARCHAR(10), FromDate, 101)>= CONVERT(VARCHAR(10),CAST('2010-02-14' AS DATETIME),101) AND 
         CONVERT(VARCHAR(10), ToDate, 101)<= CONVERT(VARCHAR(10),CAST('2012-03-14' AS DATETIME),101) ;

答案 3 :(得分:0)

您正在从ragne中选择数据

FromDate >= '2010-02-14 00:00:0000' AND ToDate <= '2012-03-14 00:00:0000'

你应该这样做:

FromDate >= '2010-02-14' AND ToDate < '2012-03-15'

答案 4 :(得分:0)

SELECT *
 FROM  table
 WHERE year_date BETWEEN FromDate AND ToDate