2012-03-20 175 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