Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2018, 15:04   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Получение типов полей в Firebird

Всем доброго дня.
Как в Firebird узнать по номерам типы полей?
Например, запросом вытаскиваю имена и числовые значения типов полей из какой-то таблицы...
Код:
select
    R.RDB$FIELD_NAME,
    F.RDB$FIELD_TYPE
from RDB$FIELDS F, RDB$RELATION_FIELDS R
where F.RDB$FIELD_NAME = R.RDB$FIELD_SOURCE
      and R.RDB$SYSTEM_FLAG = 0
      and R.RDB$RELATION_NAME = :MY_TABLE_NAME
Знаю примерно что
Код:
case F.RDB$FIELD_TYPE
      when 7 then 'smallint'
      when 8 then 'integer'
      when 10 then 'float'
      when 16 then 'numeric'
      when 27 then 'double'
      when 12 then 'date'
      when 13 then 'time'
      when 37 then 'varchar'
      when 14 then 'varchar'
      when 261 then 'blob'
    end
А где узнать все эти чёртовы номера типов полей?
На размер поля наплевать. Мне нужно всего лишь узнать это число, строка или дата.
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.01.2018, 15:27   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
    ,case f.rdb$field_type
        when 7 then 'smallint'
        when 8 then 'integer'
        when 10 then 'float'
        when 14 then 'char'
        when 16 then -- только диалект 3
          case f.rdb$field_sub_type
            when 0 then 'bigint'
            when 1 then 'numeric'
            when 2 then 'decimal'
            else 'unknown'
          end
        when 12 then 'date'
        when 13 then 'time'
        when 27 then -- только диалект 1
          case f.rdb$field_scale
            when 0 then 'double precision'
            else 'numeric'
          end
        when 35 then 'date'  --или timestamp в зависимости от диалекта
        when 37 then 'varchar'
        when 261 then 'blob'
        else 'unknown'
    end
Может чего и упустил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.01.2018, 15:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Как в Firebird узнать по номерам типы полей?
странно.
Вы задаёте вопрос и тут же даёте на него ответ.

согласно
https://firebirdsql.org/file/documen...04-fields.html

поле RDB$FIELD_TYPE
может принимать значения:
Цитата:
Код:
Data type code for the column:
7 = SMALLINT
8 = INTEGER
10 = FLOAT
12 = DATE
13 = TIME
14 = CHAR
16 = BIGINT
27 = DOUBLE PRECISION
35 = TIMESTAMP
37 = VARCHAR
261 = BLOB
Codes for DECIMAL and NUMERIC are the same as for the integer types used to store them

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
А где узнать все эти чёртовы номера типов полей?
Вы же их уже указали. В чём проблема?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2018, 15:53   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ага. Это смутило
Код:
else 'unknown'
.
и еще увидел что
Код:
      when 14 then 'varchar'
      when 37 then 'varchar'
Думал что varchar может принимать еще какие-нибудь значения.
На самом же деле 14 - это не varchar, а char.
Разобрался. Всем спасибо.
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.01.2018, 17:08   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

https://firebirdsql.org/file/documen...04-fields.html
Цитата:
Data type code for the column:
7 = SMALLINT
8 = INTEGER
10 = FLOAT
12 = DATE
13 = TIME
14 = CHAR
16 = BIGINT
27 = DOUBLE PRECISION
35 = TIMESTAMP
37 = VARCHAR
261 = BLOB
Codes for DECIMAL and NUMERIC are the same as for the integer types used to store them

Опоздал, однако..

Последний раз редактировалось Black Fregat; 10.01.2018 в 17:10. Причина: Не обновил..
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем грозит использование русских букв в названии полей в Firebird artemavd БД в Delphi 5 25.08.2012 13:03
Как получить список полей таблицы в Interbase/Firebird tarakan1983 БД в Delphi 3 26.11.2011 17:21
Firebird - fdb файл увеличивается при записи полей, но если базу очищаешь, размер остается таким же RuVarez БД в Delphi 1 23.09.2010 18:09
Firebird Получение имён таблиц и список полей определённой таблицы Alexei91 БД в Delphi 5 02.08.2010 14:00
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53