2009-06-01 5 views
0

Hai,SQL Query Help

Структура таблицы

Id No Date  Time 

0001, 01-05-2009, 040000 
0001, 02-05-2009, 020000 
0002, 01-05-2009, 060000 
0002, 01-05-2009, 180000 

Время и дата является NVARCHAR

Я хочу, чтобы получить данные между

  • Вчера 030001 на сегодня 030000
  • Позавчера 0300001 по вчерашний день 030000

Я попытался ниже упомянутый запрос

Select 
    idno, min (time), max (time) 
from 
    table 
where 
    time between 030001 and 030000 

Ничто не отображается в результате, потому что это требует времени сегодня с 03.00 утра до 03.01am именно мне нужно сегодня 03.00 утра до вчера 3:01 утра

Мне нужен запрос sql для вышеуказанного состояния

Может ли кто-нибудь мне помочь?

Jash.

+2

Можете вы изменить структуру таблицы? Хранение даты и времени в nvarchar немного глупо и делает его очень трудно запросить ... также, какую систему SQL вы используете? –

ответ

1

Трудно сортировать или фильтровать, когда ваша дата находится в формате DD-MM-YYYY. В таком формате 01-01-2009 до 02-01-2000!

Итак, сначала преобразовать вашу дату с долгие годы первых, и короткие секунды последние:

YYYY-MM-DD HH:MM:SS 

Запрос, как это может сделать это:

select [id no], 
    substring(date,1,2) + '-' + substring(date,4,2) + '-' + 
    substring(date,7,4) + ' ' + 
    substring(time,1,2) + ':' + substring(time,3,2) + ':' 
    substring(time,5,2) as NormalDate 
from YourTable 

Теперь вы можете легко выбрать все ряды для определенного периода времени:

select * 
from (
    select [id no], 
     substring(date,1,5) + '-' + substring(date,7,4) + ' ' + 
     substring(time,1,2) + ':' + substring(time,3,2) + ':' 
     substring(time,5,2) as NormalDate 
    from YourTable 
) sub 
where '2009-05-01 03:00:00' < NormalDate 
and NormalDate < '2009-05-02 03:00:00'