2012-03-20 5 views
2

Я пытаюсь извлечь записи из таблицы, используя следующий sql-запрос.Sql Query with Date range

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

+4

Можете ли вы показать нам «FromDate» и «ToDate» для записи с идентификатором «ID = 1»? –

+0

Чтобы не зависели от настроек языка, региона или формата даты, вы должны использовать формат ISO-8601 при указании дат - 'YYYYMMDD' (** no ** тире!). Кроме того: если они являются «DATETIME» oclumns (вы этого явно не сказали), тогда '<= '20120314'' найдет что-либо * до * 14 марта, но если ** не ** прочитает какие-либо записи для 14 марта (с временной частью> 00:00:00) .... –

ответ

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) 

пс:

DateAdd(day, DateDiff(day, 0, @dayAfter), 0) сбросит время 00:00

так что вам нужно desired EndTime < begining of the day after

+1

@marc_s yep - Отредактировано. (вы могли бы отредактировать его также :)). –

+0

Большое спасибо .. у меня это исправлено :) –

+0

@SyedIbrahim youre welcome. пожалуйста, также прочитайте разговор между мной и марком и микаэлем. были некоторые важные моменты, чтобы заметить. (и узнать [также для меня]) –

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