powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как в Informix узнать тип поля?
9 сообщений из 9, страница 1 из 1
Как в Informix узнать тип поля?
    #32857674
win-kim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите пожалуйста!
Мне необходимо узнать типы полей при выборке. Я знаю что в таблице syscolumns в числовом поле coltype, Informix хранит тип поля, но как узнать чему оно соответствует я не имею понятия.
Эксперементальным путем добился примерных результатов, но сталкнулся с проблемой при типе char. Какую бы длину не задавал все равно значение равно 0.

coltype name

7 DATE
10 DATETIME YEAR TO SECOND
266 DATETIME YEAR TO SECOND not null
11 BYTE in
12 TEXT in
41 boolean
0 CHAR(1)
13 VARCHAR(255)
15 NCHAR(1)
16 NVARCHAR(128)
40 lvarchar
256 CHAR(1) not null
269 VARCHAR(255) not null
1 SMALLINT
2 INT
3 FLOAT
4 SMALLFLOAT
5 DECIMAL(32)
6 SERIAL
17 INT8
258 INT not null
261 DECIMAL(32) not null
273 INT8 not null
274 SERIAL8 not null

Help me

best regards,
win-kim
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32857820
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RTFM !
Informix Guide to SQL
Reference


coltype SMALLINT Code for column data type:
0 = CHAR 14 = INTERVAL
1 = SMALLINT 15 = NCHAR
2 = INTEGER 16 = NVARCHAR
3 = FLOAT 17 = INT8
4 = SMALLFLOAT 18 = SERIAL8 *
5 = DECIMAL 19 = SET
6 = SERIAL * 20 = MULTISET
7 = DATE 21 = LIST
8 = MONEY 22 = rOW (unnamed)
9 = NULL 23 = COLLECTION
10 = DATETIME 24 = ROWREF
11 = BYTE 40 = Variable-length
opaque type
12 = TEXT 41 = Fixed-length
opaque type
13 = VARCHAR 4118 = Named row
type
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32857829
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Table syscolumns, field
collength SMALLINT Column length (in bytes)
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32858349
win-kim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь, я вчера написал уже функцию до ответа на форуме.
Только такой вопрос:
как вычислить размер типа decimal?

best regards,
win-kim
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32858403
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
win-kimПомогите пожалуйста!
Мне необходимо узнать типы полей при выборке. Я знаю что в таблице syscolumns в числовом поле coltype, Informix хранит тип поля, но как узнать чему оно соответствует я не имею понятия.
Эксперементальным путем добился примерных результатов, но сталкнулся с проблемой при типе char. Какую бы длину не задавал все равно значение равно 0.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
select colname,
             case mod(coltype,256)
                WHEN  0 THEN "CHAR"
                WHEN  1 THEN "SMALLINT"
                WHEN  2 THEN "INTEGER"
                WHEN  3 THEN "FLOAT"
                WHEN  4 THEN "SMALLFLOAT"
                WHEN  5 THEN "DECIMAL"
                WHEN  6 THEN "SERIAL"
                WHEN  7 THEN "DATE"
                WHEN  8 THEN "MONEY"
                WHEN  9 THEN "NULL"
                WHEN 10 THEN "DATETIME"
                WHEN 11 THEN "BYTE"
                WHEN 12 THEN "TEXT"
                WHEN 13 THEN "VARCHAR"
                WHEN 14 THEN "INTERVAL"
                WHEN 15 THEN "NCHAR"
                WHEN 16 THEN "NVCHAR"
                WHEN 17 THEN "INT8"
                WHEN 18 THEN "SERIAL8"
                WHEN 19 THEN "SET"
                WHEN 20 THEN "MULTISET"
                WHEN 21 THEN "LIST"
                WHEN 22 THEN "rOW (unnamed)"
                WHEN 23 THEN "COLLECTION"
                WHEN 24 THEN "ROWREF"
                WHEN 25 THEN "rOW (unnamed)"
                WHEN 40 THEN "Variable-length opaque type"
                WHEN 41 THEN "Fixed-length opaque type"
                WHEN 4118 THEN "Named row type"
                ELSE "UNKNOWN"
              END coltype,
              CASE
                WHEN mod(coltype,256) in (5,8) THEN trunc(collength/256)||","||mod(collength,256)
                WHEN mod(coltype,256) in (10,14) THEN
                   CASE trunc(mod(collength,256)/16)
                        WHEN  0 THEN "YEAR"
                        WHEN  2 THEN "MONTH"
                        WHEN  4 THEN "DAY"
                        WHEN  6 THEN "HOUR"
                        WHEN  8 THEN "MINUTE"
                        WHEN 10 THEN "SECOND"
                        WHEN 11 THEN "FRACTION(1)"
                        WHEN 12 THEN "FRACTION(2)"
                        WHEN 13 THEN "FRACTION(3)"
                        WHEN 14 THEN "FRACTION(4)"
                        WHEN 15 THEN "FRACTION(5)"
                     END ||"("||trunc(collength/256)+trunc(mod(collength,256)/16)-mod(collength,16)||") : "||
                       CASE mod(collength,16)
                        WHEN  0 THEN "YEAR"
                        WHEN  2 THEN "MONTH"
                        WHEN  4 THEN "DAY"
                        WHEN  6 THEN "HOUR"
                        WHEN  8 THEN "MINUTE"
                        WHEN 10 THEN "SECOND"
                        WHEN 11 THEN "FRACTION(1)"
                        WHEN 12 THEN "FRACTION(2)"
                        WHEN 13 THEN "FRACTION(3)"
                        WHEN 14 THEN "FRACTION(4)"
                        WHEN 15 THEN "FRACTION(5)"
                     END
                 ELSE ""||collength
          END collength,
              CASE
                    WHEN coltype>255 THEN "Нет"
                    ELSE "Да" END nnull,
                    colno
                                from syscolumns
                                where tabid=:tabid
order by colno
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32868460
win-kim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис,
Спасиб большое

best regards,
win-kim
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32874630
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Красиво. Сам что-то подобное делал, но намного кривее. А теперь смотрю на это и просто руки чешутся подправить старую свою программку. Хотя работает она в принципе правильно, но так намного красивее.
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32874649
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там пара неточностей (year(4) to second вместо year to second), я его давно не использую.

-----------------------------------------------------------
Хочу есть. myinformix
...
Рейтинг: 0 / 0
Как в Informix узнать тип поля?
    #32874808
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно, но для моих целей подойдет и существующий вариант. Я его всеравно буду переделывать под ESQL/C, у меня просто, глядя на этот запрос, появилась идея, как сделать красиво у себя. :-)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как в Informix узнать тип поля?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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