2012-03-20 252 views
2

我想从表中使用下面的SQL查询获取记录。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 

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

+0

你可以发布你的餐桌设计吗? – Colin 2012-03-20 07:59:15

+4

你能告诉我们'ID = 1'的记录有'FromDate'和'ToDate'吗? – 2012-03-20 07:59:46

+0

要独立于任何语言,区域或日期格式设置,在指定日期 - 'YYYYMMDD'(** no **破折号!)时应使用ISO-8601格式。另外:如果这些是'DATETIME'oclumns(你没有明确地这样说),那么在3月14日之前,'<='20120314''会发现任何*但如果**不会**读取任何条目3月14日(时间部分> 00:00:00).... – 2012-03-20 08:10:54

回答

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) 

PS:

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

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

+1

@marc_s yep - 编辑。 (你也可以编辑它:))。 – 2012-03-20 09:23:30

+0

非常感谢..我已经修好:) – 2012-03-20 09:38:02

+0

@SyedIbrahim欢迎您。也请阅读我与marc和mikael之间的对话。有一些重要的事项要注意。 (并学习[也适合我]) – 2012-03-20 09:42:19

0

如果选择没有fromdate和todate之间的数据然后删除ID = 1。 在这种情况下,选择的记录ID = 1,FromDate和ToDate选中此条目。

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) ; 
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' 
0
SELECT * 
FROM table 
WHERE year_date BETWEEN FromDate AND ToDate