Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 Помогите составить SQL-запрос  [new]
Vodnik
Member

Откуда:
Сообщений: 14
Имеется БД Informix с таблицей телефонных вызовов CALLRECORD.
Есть поле CALLSTART в формате DATETIME c датой и временем начала каждого вызова.
Требуется сделать выборку записей, соответствующих таким критериям:
D1 <= дата начала вызова <= D2
T1 <= время начала вызова <= T2
Фишка в том, что для каждой даты нужно получить только записи за промежуток времени.
Таким образом должна получиться выборка, скажем, с 1 по 30 число месяца, только за рабоче время с 9:00 до 18:00.
Что-либо записывать в БД по условиям использования недопустимо (например, сохранённые процедуры - хотя, возможно, уже есть нужные, просто я не умею найти)
SELECT * FROM CALLRECORD WHERE CALLSTART BETWEEN D1 AND D2
Дальше моих знаний недостаточно
26 апр 18, 11:44    [21370399]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить SQL-запрос  [new]
982183
Member

Откуда: VL
Сообщений: 3374
Функции DAY() и HOUR() там есть?
26 апр 18, 12:23    [21370542]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить SQL-запрос  [new]
Vodnik
Member

Откуда:
Сообщений: 14
Обычно в примерах приводят аналогичные конструкции вида:
DATETIME YEAR TO DAY
DATETIME HOUR TO SECOND
но в WHERE у меня их вставить пока не получилось :(

Есть функция DATE() - извлекает дату в формате DATE, для времени такой не нашёл

Вообще, вариантов приведения к нужному типу много:
EXTEND(dt_field, YEAR TO DAY)
CAST(dt_field AS DATETIME YEAR TO DAY)
dt_field::DATETIME YEAR TO DAY
CAST(dt_field AS DATE)
dt_field::DATE
DATE(dt_field)

Я попробую их все, только подскажите общую идею
26 апр 18, 12:53    [21370623]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить SQL-запрос  [new]
982183
Member

Откуда: VL
Сообщений: 3374
в ИЗВЕСТНОМ МНЕ СИНТАКСИСЕ ЭТО ВЫГЛЯДИТ ТАК:
WHERE BETWEEN(DAY(CALLSTART),D1,D2 ) AND BETWEEN(HOUR(CALLSTART),T1,T2 )
26 апр 18, 12:59    [21370642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить SQL-запрос  [new]
Ikir
Member

Откуда:
Сообщений: 271
Vodnik,

Не совсем понятно, что есть D1,D2 и T1,T2.
Но если предположить, что
D1 DATE,
D2 DATE,
T1 DATETIME HOUR TO MINUTE,
T2 DATETIME HOUR TO MINUTE

то так
SELECT * FROM CALLRECORD 
         WHERE 
               DATE(CALLSTART) BETWEEN D1 AND D2
              AND  CAST(CALLSTART as DATETIME HOUR TO MINUTE)  BETWEEN T1 AND T2 
26 апр 18, 14:08    [21370951]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить SQL-запрос  [new]
Vodnik
Member

Откуда:
Сообщений: 14
@Ikir, спасибо огромное, только Ваш вариант и заработал!
26 апр 18, 15:15    [21371202]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить