powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите составить SQL-запрос
6 сообщений из 6, страница 1 из 1
Помогите составить SQL-запрос
    #39636650
Vodnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется БД Informix с таблицей телефонных вызовов CALLRECORD.
Есть поле CALLSTART в формате DATETIME c датой и временем начала каждого вызова.
Требуется сделать выборку записей, соответствующих таким критериям:
D1 <= дата начала вызова <= D2
T1 <= время начала вызова <= T2
Фишка в том, что для каждой даты нужно получить только записи за промежуток времени.
Таким образом должна получиться выборка, скажем, с 1 по 30 число месяца, только за рабоче время с 9:00 до 18:00.
Что-либо записывать в БД по условиям использования недопустимо (например, сохранённые процедуры - хотя, возможно, уже есть нужные, просто я не умею найти)
SELECT * FROM CALLRECORD WHERE CALLSTART BETWEEN D1 AND D2
Дальше моих знаний недостаточно
...
Рейтинг: 0 / 0
Помогите составить SQL-запрос
    #39636688
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функции DAY() и HOUR() там есть?
...
Рейтинг: 0 / 0
Помогите составить SQL-запрос
    #39636713
Vodnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычно в примерах приводят аналогичные конструкции вида:
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)

Я попробую их все, только подскажите общую идею
...
Рейтинг: 0 / 0
Помогите составить SQL-запрос
    #39636718
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ИЗВЕСТНОМ МНЕ СИНТАКСИСЕ ЭТО ВЫГЛЯДИТ ТАК:
WHERE BETWEEN(DAY(CALLSTART),D1,D2 ) AND BETWEEN(HOUR(CALLSTART),T1,T2 )
...
Рейтинг: 0 / 0
Помогите составить SQL-запрос
    #39636766
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vodnik,

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

то так
Код: plsql
1.
2.
3.
4.
SELECT * FROM CALLRECORD 
         WHERE 
               DATE(CALLSTART) BETWEEN D1 AND D2
              AND  CAST(CALLSTART as DATETIME HOUR TO MINUTE)  BETWEEN T1 AND T2 
...
Рейтинг: 0 / 0
Помогите составить SQL-запрос
    #39636812
Vodnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@Ikir, спасибо огромное, только Ваш вариант и заработал!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите составить SQL-запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]