У меня есть такая таблица:
create table t (
t0 datetime year to fraction,
t1 datetime year to fraction(1),
t2 datetime year to fraction(2),
t3 datetime year to fraction(3),
t4 datetime year to fraction(4)
);
Теперь я хотел бы перепроектировать информацию о типе данных этой таблицы. Меня в основном интересует часть с дробными секундами, но если я смогу найти другую информацию квалификатора, это даже лучше. Следующий запрос не работает:
select
c.colname::varchar(10) colname,
informix.schema_coltypename(c.coltype, c.extended_id)::varchar(10) coltypename,
c.collength,
informix.schema_precision(c.coltype, c.extended_id, c.collength) precision,
informix.schema_numscale(c.coltype, c.collength) numscale,
informix.schema_datetype(c.coltype, c.collength) datetype,
c.coltype
from syscolumns c
join systables t on c.tabid = t.tabid
where t.tabname = 't'
Это дает
|colname |coltypename|collength|precision |numscale |datetype |coltype|
|----------|-----------|---------|-----------|-----------|-----------|-------|
|t0 |DATETIME |4365 |4365 | |60 |10 |
|t1 |DATETIME |3851 |3851 | |60 |10 |
|t2 |DATETIME |4108 |4108 | |60 |10 |
|t3 |DATETIME |4365 |4365 | |60 |10 |
|t4 |DATETIME |4622 |4622 | |60 |10 |
Кажется, что collength содержит соответствующую информацию, но я не могу извлечь ее с помощью schema_precision
или schema_numscale
, поскольку в противном случае это возможно для числовой точности. Кроме того, schema_datetype
не дает никаких интересных результатов.
Как я могу преобразовать информацию coltype
обратно в datetime year to fraction(N)
?
HEX(syscolumns.collength)
упрощает просмотр значений трех компонентов. Аналогичная операция работает и для INTERVAL. Различия в том, что (1) есть два класса интервалов: ГОД-МЕСЯЦ и ДЕНЬ-СЕКУНД без пересечения границы, и (2) вы можете иметь ИНТЕРВАЛ ДЕНЬ (9) ДО ДОЛБЫ (5), и длина помогает вам определите, равна ли начальная длина 2 (по умолчанию для всех, кроме YEAR, где она равна 4) или длиннее (или короче, но это очень необычно). 13.03.2020