Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 10.01.2018, 16:04   #1
_SERGEYX_
Профессионал
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Адрес: г. Витебск
Сообщений: 1,517
Репутация: 437

icq: 375449564
По умолчанию Получение типов полей в 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, 16:27   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,685
Репутация: 6211
По умолчанию

Код:

    ,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, 16:27   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,916
Репутация: 5228
По умолчанию

Цитата:
Сообщение от _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, 16:53   #4
_SERGEYX_
Профессионал
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Адрес: г. Витебск
Сообщений: 1,517
Репутация: 437

icq: 375449564
По умолчанию

Ага. Это смутило
Код:

else 'unknown'

.
и еще увидел что
Код:

      when 14 then 'varchar'
      when 37 then 'varchar'

Думал что varchar может принимать еще какие-нибудь значения.
На самом же деле 14 - это не varchar, а char.
Разобрался. Всем спасибо.
_SERGEYX_ вне форума   Ответить с цитированием
Старый 10.01.2018, 18:08   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 904
Репутация: 652
По умолчанию

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 в 18:10. Причина: Не обновил..
Black Fregat вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем грозит использование русских букв в названии полей в 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


19:38.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru