2014-09-23 4 views
1

У меня есть эта таблицаДиапазон дат в выберите

CREATE TABLE Table1 (
    MY_ID INTEGER NOT NULL, 
    SCAN_TIME TIMESTAMP NOT NULL, 
    WORKCELL_ID SMALLINT 
); 

Моя проблема, когда я использую выберите SQL для получения записей между двумя датами, которые я получаю пустой результат, если пользователь выбирает ту же дату для двух дат

для экс:

Select * from Table1 
where SCAN_TIME between '20.9.2014' and '20.9.2014' 

Хотя есть записи в этих датах '20 .9.2014' , но я получаю пустой результат, и я получаю результаты, только если я увеличить вторую дату на один день, чтобы быть '21 .9.2014' !! почему это и как я должен это исправить?

+1

Вам не хватает слова «МЕЖДУ». – Barmar

ответ

2

Проблема в том, что вы использовали timestamp как тип, и все испортилось из-за временной части. Попробуйте использовать Date.

Когда вы говорили между 2014-09-20 и 2014-09-20, вы на самом деле говорите между полуночью в 2014-09-20 и 2014-09-20 гг., По-видимому, ничто не попадает между другим, чем точный момент полночь.

Если вы не можете контролировать структуру таблицы, делать то, что PM 77-1 предложил в своем комментарии ниже - использовать бросок, чтобы бросить timestamp в date:

select 1 from table1 
where cast(scan_time as date) between 'someday1' and 'someday2'; 
+0

... или CAST to DATE в запросе –

3

TIMESTAMP содержит и дату и время. Поскольку вы не указываете время в своем предложении WHERE, оно использует начало дня для обоих времен. Так что вы на самом деле писать эквивалент:

WHERE SCAN_TIME between '20.9.2014 00:00:00' and '20.9.2014 00:00:00' 

Если время часть метки времени не является на самом деле 00:00:00, он не будет удовлетворять этому критерию. Вы должны преобразовать метку времени в дату или указать время в вашем диапазоне, например.

WHERE SCAN_TIME between '20.9.2014 00:00:00' and '20.9.2014 23:59:59' 
Смежные вопросы