Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 тип interval  [new]
Ivanna
Guest
Помогите пожалуйста нам,невозможно нигде найти информацию.
База Informix имеет тип данных Interval .Как нам выделить из него часы и минуты в sql-запросе или в stored-процедуре? При создании поля мы задали
диапазон Hour to minute.

Заранее всем спасибо.
29 окт 03, 13:48    [397884]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
ton
Guest
В каком смысле "отделить"? Просто вывести как отдельные поля в запросе (для отображения) ? Записать в разные переменные? Иметь возможность в отдельно изменять минуты и часы?

Если первое, то:

Select field, field::interval hour to hour hu ,
( field -field::interval hour to hour)::interval minute to minute min
From table1

Если второе, то:
Определив переменные (Hour, Min) соответствущих типов в DEFINE, выполнить тот же запрос:

Select field, field::interval hour to hour ,
( field -field::interval hour to hour)::interval minute to minute
into Hour, Min
From table1

Если хочется в процедуре выполнить какие-то операции с этими переменными, в действиях пользоваться таким понятием, как units :

если требуется прибавить, вычесть некоторое количество минут из Min

Min- 5 units minute
29 окт 03, 16:16    [398336]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Ivanna
Guest
Ton,спасибо за ответ,но конструкция ::interval выдает синтаксическую
ошибку.Т.е получить отдельно часы и минуты из поля типа interval в запросе нам пока не удается.Наш запрос по твоей подсказке выглядит так:

select dlit_povr,dlit_povr::interval hour to hour dlit from povr_cab

dlit_povr как раз то самое поле типа interval
Что мы делаем не так?
29 окт 03, 17:28    [398560]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Daugava
Member

Откуда: Riga-Kiev-Gurzuf
Сообщений: 718
Все это из-за того, что кто-то не указал с какой версией сервера он имеет дело. Судя по всему, речь идет о 7-ке, а не о 9-ке, по этому "::interval" и не работает.

Итак:

select dlit_povr,Extend(dlit_povr, hour to hour) dlit from povr_cab
29 окт 03, 18:50    [398758]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
ton
Guest
>Daugava Боюсь, что эта функция поле типа interval не обработает. Она только datetime понимает.

>Ivanna А какая, действительно, версия Информикс-сервера у вас?
30 окт 03, 09:38    [399067]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Ivanna
Guest
Ребята,спасибо вам всем за сострадание.Мы уже замучились с этим
полем interval.Вроде должно быть так просто и не получается.
Informix у нас действительно 7-й версии.Прочитали мы про extend вот здесь : http://www.citforum.ru/database/informix/h4fu.shtml
Ton прав,она используется для полей datetime.Запрос с units тоже не дает
положительного результата.
30 окт 03, 11:12    [399335]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Daugava
Member

Откуда: Riga-Kiev-Gurzuf
Сообщений: 718
>>Daugava Боюсь, что эта функция поле типа interval не обработает. Она только datetime понимает.
ton, не надо боятся надо проверить :-). Я перед тем как писать проверил на 9-ке. Живой 7-ки у меня под рукой нет, но энциклопедий юных сурков от разных версий у меня предостаточно. Описание EXTEND в версиях 7.3 и 9.2 практически идентичны, она предназначен для datetime и date. Учитывая, что у информикса сплошь и рядом имеет место быть неявное приведение типов, она вполне подходит и для interval.
30 окт 03, 11:28    [399376]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
ton1404
Member

Откуда:
Сообщений: 3
> Daugava Боязнь основывалась как раз на опыте . Было проверено (на 9.3 правда). К сожалению, информикс (9.3) у меня не допустил такого преобразования. Неужели у вас допустил ? Видимо, 9.2 было переходом (в ней уже появился оператор CAST(или ::) и ещё была возможность преобразования типа ). А в 9.3 от неё избавились за ненадобностью (раз появился ::). Или у нас различаются параметры настройки серверов.

> Ivanna
Дык у вас не отработал запрос
select dlit_povr,Extend(dlit_povr, hour to hour) dlit from povr_cab
?
30 окт 03, 12:11    [399496]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
ton1404
Member

Откуда:
Сообщений: 3
как вы уже, навреное, поняли я - бывший ton. :-)
30 окт 03, 12:13    [399500]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Ivanna
Guest
Запрос
select dlit_povr,Extend(dlit_povr, hour to hour) dlit from povr_cab
не отработал
Ошибка:
It is not possible to convert between the specified types

При создании базы поле interval было создано с ограничением
hour(3) to minute
Точная версия informix-сервера 7.31 C4
30 окт 03, 12:25    [399533]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Daugava
Member

Откуда: Riga-Kiev-Gurzuf
Сообщений: 718
Мда, я поленился :-(
При обращении к пустой таблице ошибки нет. Если вставить какие-нибудь данные,
"It is not possible to convert between the specified types ".

В 7-ке уже есть функция SUBSTR(), так что можно вырезать часы и минуты просто из строки.
create table "informix".test
(
a interval hour(3) to minute
);
insert into test values (interval(723:32) hour(3) to minute);
insert into test values (interval(3:32) hour(3) to minute);
select substr(a,1,4) HOUR
from test;
30 окт 03, 13:02    [399636]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
Ivanna
Guest
Daugava,огромное Вам спасибо!Спасибо Ton-у!За помощь всем сапасибо.
Отдельное спасибо этому форуму !
Вариант Daugava c использованием substr нам подошел.
Желаем всем творческих успехов, да и себе в том числе(жаль,что сами не догадались).
30 окт 03, 13:22    [399689]     Ответить | Цитировать Сообщить модератору
 Re: тип interval  [new]
ton1404
Member

Откуда:
Сообщений: 3
>> Daugava
Оригинально !
30 окт 03, 14:12    [399849]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить